在python中使用“类型提示”符号有什么好处吗?
import sys
def parse(arg_line: int) -> str:
print (arg_line) # passing a string, returning None
if __name__ == '__main__':
parse(' '.join(sys.argv[1:]))在我看来,它似乎使语法变得复杂,而没有提供任何实际的好处(在开发环境之外)。在此基础上:
type约束?据我所知,在python代码库本身中也没有看到这么多--大多数类型都是手动执行的,例如:argparse.py和我在https://github.com/python/cpython/blob/3.7/Lib/中浏览过的任何其他文件。
发布于 2020-09-10 22:40:29
python是否计划在语言本身中包含类型约束?
几乎肯定不是,也肯定不会在下一个主要版本之前。
拥有“类型提示”的好处是什么?我就不能把它放进文件串之类的地方吗?
从我的头顶上,考虑以下几点:
mypy这样的工具进行验证。foo(时,IDE可以获取类型提示,并在旁边显示一个显示foo(x: int, y: List[int])的框。作为一名开发人员,您的优势在于您完全掌握了所需的信息,而不必大嚼整个docstring。functools.singledispatch之类的模块使用,也可以由外部库(如multipledispatch )来添加其他与类型相关的特性(在本例中,根据名称和类型(而不仅仅是名称)分派函数调用)。发布于 2022-05-09 14:54:55
利用类型提示的一个选项是强制执行模块。关于官方的python支持,似乎不太可能在不久的将来直接执行类型提示。
进入type_enforced,包允许您利用类型提示。它同时支持输入和输出类型。只有指定的类型才被强制执行。还支持多个可能的输入,这样您就可以指定int或float之类的内容。
首先验证输入类型(在函数调用上延迟),如果有效,则对函数进行处理,然后对返回值进行验证。
存在一些限制,因此不支持嵌套类型结构。例如,不能将类型指定为整数列表,而只能指定列表。您需要验证函数中列表中的项。
pip install type_enforced>>> import type_enforced
>>> @type_enforced.Enforcer
... def my_fn(a: int , b: [int, str] =2, c: int =3) -> None:
... pass
...
>>> my_fn(a=1, b=2, c=3)
>>> my_fn(a=1, b='2', c=3)
>>> my_fn(a='a', b=2, c=3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/conmak/development/personal/type_enforced/type_enforced/enforcer.py", line 47, in __call__
return self.__validate_types__(*args, **kwargs)
File "/home/conmak/development/personal/type_enforced/type_enforced/enforcer.py", line 83, in __validate_types__
self.__check_type__(assigned_vars.get(key), value, key)
File "/home/conmak/development/personal/type_enforced/type_enforced/enforcer.py", line 56, in __check_type__
self.__exception__(
File "/home/conmak/development/personal/type_enforced/type_enforced/enforcer.py", line 37, in __exception__
raise TypeError(f"({self.__fn__.__qualname__}): {message}")
TypeError: (my_fn): Type mismatch for typed function (my_fn) with `a`. Expected one of the following `[<class 'int'>]` but got `<class 'str'>` instead.https://stackoverflow.com/questions/63838471
复制相似问题