Python 3 类型检查不适用于 use typing 模块?

标签 python python-3.5

为什么类型检查在 Python 3 中不起作用?

我已经完成了以下带有类型检查或提示的代码:

import typing

def hello(message: str):
    print(type(message))
    print(message)

hello('Hello!')
hello(1)
hello(1.1)

它产生有效的输出(但在 int 或 float 上没有错误)。

<class 'str'>
Hello!
<class 'int'>
1
<class 'float'>
1.1

为什么会这样?可能我不理解 typing 模块和 Python 提示。

最佳答案

Python 的类型提示仅供引用。参数类型的类型检查或自动强制转换不是该语言的一部分。参见 PEP 3107 :

Function annotations are nothing more than a way of associating arbitrary Python expressions with various parts of a function at compile-time.

附加模块可以使用类型提示来检查参数类型和返回值,甚至可以将参数强制转换为预期类型。例如,here是一个模块,它将检查参数类型并在发现不匹配时进行投诉。

但这不是 Python 本身的工作方式,所以不要依赖它,也不要寻找将它引入代码的方法。在 Python 风格中,您的函数应该被编写为尽可能灵活地处理它们可以使用的参数类型(谷歌“鸭子类型”)。如果他们得到了他们无法处理的东西……好吧,这就是异常(exception)的原因。

更新:typing提供类型提示支持的模块从 Python 3.5 开始被添加到标准库中(“临时”)。它提供了一些有用的类型名称,包括 AnyCallableUnion,以及一个辅助函数 NewType。类型提示仍然非常非常可选。

关于Python 3 类型检查不适用于 use typing 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43976861/

相关文章:

pip - Bash:Python3:找不到命令(Windows,discord.py)

Python 2.7 无法从 urllib.request 中找到模块请求

python - 在 Python 中比较大字符串的好方法?

python - 将 jinja2 过滤器应用于 block ?

python 3.5 在 statsmodels ImportError : cannot import name '_representation'

GUI 和控制台上的 python 日志输出

python - Django 项目中的通配符子域

python - 加权分类交叉熵语义分割

python - QImage 倾斜某些图像,但不倾斜其他图像

python - 为什么 Python set([]) 不等于 {}?