Sła*_*art 8 python type-hinting python-3.x
这是关于失踪typing.Range。
range包中没有 for 类型typing,但同时我们看到typing.re.Match,这是一个面向包的类型。ortyping.sequence太typing.Iterable宽泛。
有没有更好的方法来检查range类型和仅range类型?除了使用:
range_instance.__class__ == range
Run Code Online (Sandbox Code Playgroud)
更新:
需要明确的是,我的意思是打字中的某些类型包括某事物的所有元素或方面,例如typeing.Iterable(通用类型,这很好)
另一方面,也有非常具体的类型,例如
typing.Generator, typing.Tuple, typing.Dict, typing.re.Match
typing.AsyncContextManager, ...
但不是
typing.Range
事实 1:range类型是 Python 中的不同类型(例如,范围具有额外的优化来检查其中的元素,有时知道您正在处理列表还是范围是有意义的)
事实 2:typing模块似乎涵盖了类型的所有方面。(如果您有疑问,请参阅那里的导入和逻辑)
知道这一点,我认为typing.Range是缺失的。
否则,人们会对使用哪一个感到困惑:
r: range或r: typing.Iterable或创建自定义别名
类型提示和类型检查之间的区别在这里并不重要。
小智 5
而不是(不可能,因为打字。范围不存在):
from typing import Range
def foo(r: Range) -> None:
...
Run Code Online (Sandbox Code Playgroud)
做就是了:
def foo(r: range) -> None:
...
Run Code Online (Sandbox Code Playgroud)
由于rangeis 已经是一种类型和工厂函数,因此您不需要为范围提供单独的类型。
请注意,存在像typing.Dict这样的类型,因为虽然dict它已经是一种类型,但以前不支持使用内置类型作为泛型,因此您不能将 dict[str, int] 作为类型注释,而必须使用 Dict [字符串,整数]。但由于range在逻辑上不是泛型,因此不需要typing对应的单独类型来range支持泛型。
| 归档时间: |
|
| 查看次数: |
8362 次 |
| 最近记录: |