为什么类型检查在Python 3中不起作用?
我已经使用类型检查或提示完成了以下代码:
import typing
def hello(message: str):
print(type(message))
print(message)
hello('Hello!')
hello(1)
hello(1.1)
Run Code Online (Sandbox Code Playgroud)
它产生有效的输出(但int或float上没有错误)。
<class 'str'>
Hello!
<class 'int'>
1
<class 'float'>
1.1
Run Code Online (Sandbox Code Playgroud)
为什么这样工作?也许我不理解输入模块和Python提示。
Python 3 没有您正在寻找的类型检查。
def hello(message: str):
Run Code Online (Sandbox Code Playgroud)
这是一个函数注释。
https://www.python.org/dev/peps/pep-3107/
它所做的只是将一些额外的数据与函数对象相关联。func_annotations稍后可以在函数的属性上检查这一点。
除此之外,它没有任何内置行为。目的是让第三方在此基础上构建行为。
Python的类型提示仅供参考。类型检查或参数类型的自动强制不属于语言的一部分。参见PEP 3107:
函数注释无非是在编译时将任意Python表达式与函数的各个部分相关联的一种方式。
该类型提示可以通过附加模块可以用来检查类型的参数和返回值,甚至强迫参数预期的类型。例如,这是一个模块,它将检查参数类型并在发现不匹配项时进行投诉。
但这不是Python本身的工作方式,因此不要依赖它,也不要寻找将其引入代码中的方法。以Python风格,您的函数在编写时可以使用的参数类型应尽可能灵活(谷歌“鸭式打字”)。如果他们得到了一些他们无法处理的东西……那就是例外。
更新:该typing模块提供了对类型提示的支持,已从Python 3.5开始添加到标准库中(“临时”)。它提供了一些有用的类型名称包括Any,Callable和Union,和一个辅助功能NewType。类型提示仍然是非常非常可选的。
| 归档时间: |
|
| 查看次数: |
1742 次 |
| 最近记录: |