百独托管7500 紫田网络超高转化播放器收cps[推荐]速盾CDN 免实名免备防屏蔽阿里云 爆款特卖9.9元封顶提升alexa、IP流量7Q5团队
【腾讯云】中小企福利专场【腾讯云】多款产品1折起高防 随时退换 好耶数据小飞国外网赚带你月入万元炎黄网络4H4G10M 99每月
香港带宽CN2/美国站群优惠中客数据中心 服务器租用联盟系统移动广告平台 中易企业专场腾讯云服务器2.5折九九数据 工信部正规资质
腾讯云新用户大礼包代金券高价收cpa注册量高价展示【腾讯云】2核2G/9.93起租服务器找45互联 随时退换阿里云 短信服务 验证秒达

[其它内容] 探索 Python Type Hints 中的冷门但实用的特性 [复制链接]
查看:164 | 回复:0

1477

主题

1656

帖子

9

积分

落伍者(一心一意)

Rank: 1

贡献
685
鲜花
0
注册时间
2016-6-22

落伍者落伍微信绑定落伍手机绑定

发表于 2024-4-17 15:17:36 | 显示全部楼层 |阅读模式 来自 中国江苏淮安
华科云商丑图1.jpg
在 Python 3.5 引入的 Type Hints 功能为 Python 代码的静态类型检查提供了支持,使得开发者能够更好地管理代码的类型信息,提高代码的可读性和可维护性。除了常见的类型注解外,Python Type Hints 还有一些冷门但实用的特性,本文将带你深入探索这些特性。

1. Union Types(联合类型)

在 Type Hints 中,我们可以使用 Union 类型来指定一个变量可以接受多种不同类型的值。这在处理参数为多种类型的情况下非常有用,例如:

```python

from typing import Union

def square(number: Union[int, float]) -> Union[int, float]:

  return number ** 2

```

在上面的示例中,`number` 参数可以是 `int` 或 `float` 类型,返回值也可以是 `int` 或 `float` 类型。

2. Type Aliases(类型别名)

Type Aliases 允许我们为复杂的类型注解定义别名,使代码更具可读性和可维护性。例如,我们可以使用 `TypeVar` 和 `Union` 来创建一个复杂的类型别名:

```python

from typing import TypeVar, Union

Numeric = TypeVar('Numeric', int, float)

Vector = Union[Numeric, tuple[Numeric, Numeric]]

```

然后,我们可以在代码中使用 `Numeric` 和 `Vector` 来代替对应的类型注解,使代码更加清晰易懂。

3. TypeVar and Generic Types(类型变量和泛型类型)

`TypeVar` 允许我们创建泛型类型变量,使函数、类和方法更加灵活和通用。结合 `Generic` 类型,我们可以轻松地定义泛型函数和类,例如:

```python

from typing import TypeVar, Generic

from collections.abc import Iterable

T = TypeVar('T')

class Stack(Generic[T]):

  def __init__(self) -> None:

      self._items: list[T] = []

  def push(self, item: T) -> None:

      self._items.append(item)

  def pop(self) -> T:

      return self._items.pop()

  def __len__(self) -> int:

      return len(self._items)

def print_items(items: Iterable[T]) -> None:

  for item in items:

      print(item)

```

在上面的示例中,我们使用了 `TypeVar` 和 `Generic` 来定义了一个通用的栈类 `Stack` 和一个接受任意可迭代对象的打印函数 `print_items`。

4. Literal Types(字面量类型)

字面量类型允许我们指定一个变量只能接受特定的字面量值。这在需要限制参数的取值范围时非常有用,例如:

```python

from typing import Literal

def greet(name: Literal['Alice', 'Bob']) -> str:

  return f"Hello, {name}!"

print(greet('Alice'))  # 输出:Hello, Alice!

```

在上面的示例中,`name` 参数只能是 `'Alice'` 或 `'Bob'`,如果传入其他值将会触发类型检查错误。

5. Final Variables(不可变变量)

通过使用 `Final` 类型注解,我们可以将变量标记为不可变的,防止其被重新赋值。这有助于提高代码的可维护性和安全性,例如:

```python

from typing import Final

MAX_RETRY: Final = 3

def perform_action() -> None:

  for _ in range(MAX_RETRY):

      # 进行操作

```

在上面的示例中,`MAX_RETRY` 被标记为不可变变量,确保其在代码中不会被修改。

Python Type Hints 中的这些冷门特性提供了更多的工具和选项,帮助开发者更好地利用类型注解来提高代码质量和可维护性。通过合理地运用这些特性,我们可以编写出更加清晰、可靠的 Python 代码。
企业专线拨号VPS动态IP派克斯ADSL本地拨号,联系QQ174629754
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

论坛客服/商务合作/投诉举报:2171544 (QQ)
落伍者创建于2001/03/14,本站内容均为会员发表,并不代表落伍立场!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!
落伍官方微信:2030286 邮箱:(djfsys@gmail.com|tech@im286.com)
© 2001-2014

浙公网安备 33060302000191号

浙ICP备11034705号 BBS专项电子公告通信管[2010]226号

  落伍法律顾问: ITlaw-庄毅雄

手机版|找回帐号|不能发帖?|Archiver|落伍者

GMT+8, 2024-11-25 16:42 , Processed in 0.050957 second(s), 34 queries , Gzip On.

返回顶部