Python 中Typing,你了解多少

Typing是一个功能强大的内置 Python 模块,它为类型提示提供运行时支持。可以强制 Python 在运行时进行类型检查。

在了解模块的作用 typing 之前,需要了解动态和静态类型的编程语言。

动态类型编程语言不需要参数、变量、返回变量等的类型规范。Python 是一种动态类型的编程语言;解释器在运行时配置类型。

静态类型编程语言确实需要参数、变量、返回变量等的类型规范。C、C++、C# 和 Java 是静态类型编程语言的一些示例。

通常,静态类型编程语言比动态类型编程语言更快,因为它们不需要在运行时配置类型。

不要误解类型和类型注释的作用。它们不会显著影响性能。没有必要仅将它们用于性能问题。

我将要展示的一些功能不需要键入模块,除非您的 Python 版本低于 3.12,并且某些功能确实需要 Python 3.12 或更高版本。

变量

变量类型提示的语法为 variable_name: type = value

number: int = 1234
string: str = "Hello world"
boolean: bool = True
decimal: float = 123.32
listOfInt: list[int] = [1, 2, 3, 4]
tupleOfbool: tuple[bool] = [True, False, True]
dictIntStr: dict[int, str] = {1: "Id1", 2: "Id2"}

# tuple of one int and one float
tuple [int, float] = (12, 23.4)

自定义类型

创建自定义类型别名就像定义变量类型一样简单。

Scalar = int
Vector = list[Scalar]

print(type(Scalar), type(Vector))

使用 TypeAlias 标记以明确表示这是一个类型别名,而不是普通的变量赋值

Scalar: TypeAlias = int
Vector: TypeAlias = list[float]

print(type(Scalar), type(Vector))

参数和返回值

参数的语法与变量的语法非常相似,对于 parameter_name: type 函数的 () 返回值, : 需要编写 -> return_value

Scalar: TypeAlias = int
Vector: TypeAlias = list[float]

def scale(scalar: float, vector: vector) -> Vector:
  return [scalar * num for num in vector]

new_vector = scale(2.0, [1.0, -4.2, 5.4])
print(new_vector)

如果函数没有返回值(如果它是 void 函数),则使用 None

类型:Any

有时不想指定类型,或者需要在运行时更改它。出于这些目的,可以使用类型 Any .

from typing import Any

type_any: Any = None # as None
type_any = [] # as list
type_any = 2 # as int

print(s)

NewType

用于 NewType 创建不同的类型。

Password = NewType("Password", str)
some_password = Password("qwert")

静态类型检查器会将新类型视为原始类型的子类。这在帮助捕获逻辑错误方面非常有用:

def check_password(password: Password) -> bool:
    ...

# passes type checking
password1_check = check_password(UserId("qwerty"))

# fails type checking; an str is not a Password
password1_check = get_user_name("12345")

可以对类型执行 str 操作,而输出将是 str . Password 这还使您能够在需要 an str 的地方传递 Password 类型。

函数

用于 typing.Callable 指定需要作为函数分配的变量。

def add(a: int, b: int) -> int:
  return a + b

a function that takes two parameters of type int and returns an int.
x: Callable[[int, int], int]

此语法必须与两个值一起使用:参数列表和返回类型。

如果给出一个文字省略 ... 号作为参数列表,则表示具有任意参数列表的可调用对象是可以接受的:

from typing import Callable

def add(a: int, b: int) -> int:
  return a + b

x: Callable[..., int]
x = add

泛 型

一个函数或类,可以处理不同类型的 valeus,而不是单一类型。

def first[T](l: list[T]) -> T:
  return l[0]

print(first[list[int]]([1, 2, 3])
print(first[list[float]]([1.0, 2.0, 3.0])
print(first[tuple[int]]((1, 2, 3))


相关文章

Python数据类型的转换

变量的数据类型非常重要,通常情况下只有相同类型的变量才能进行运算。Python 具有简单的数据类型自动转换功能: 如果是整数与浮点运算,系统会先将整数转换为浮点数再运算, 运算结果为浮点型,例如:&g...

Python 入门系列——8. 类型转换

指定变量类型相信很多次你都想强制给某一个变量赋一个类型,现在可以使用 强制转换 了, Python 是一个面向对象语言,所以你可以在类中定义数据类型,包括一些基元类型。在 Python 中实现转换可以...

Python3 数据类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。Python 数据类型转换可以分为两种:隐式类型转换 - 自动完成 显式类型转换 - 需要使用类型...

我用这11个Python库,把300行代码缩短到3行

在Python编程的世界里,有一些工具的出现,简直就像是为开发者量身定制的“秘密武器”。它们并非高深莫测的黑科技,而是实实在在能够大幅提升开发效率、减少重复劳动的库。这些工具的存在,让许多开发者不禁感...

python 类型检查解决方案及最佳实践

在Python中实现类型检查安全是提高代码健壮性的关键。以下是详细的解决方案和最佳实践,分为几个核心部分:一、Python类型系统的本质动态类型:运行时确定变量类型强类型:不支持隐式类型转换(如 &#...

如何用Python的pandas库修改列的数据类型

题目DataFrame students +-------------+--------+ | Column Name | Type | +-------------+--------+ | st...