Python 3类型检查不能与使用键入模块一起使用?

Cha*_*eon 4 python python-3.5

为什么类型检查在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提示。

Jea*_*one 5

Python 3 没有您正在寻找的类型检查。

def hello(message: str):
Run Code Online (Sandbox Code Playgroud)

这是一个函数注释

https://www.python.org/dev/peps/pep-3107/

它所做的只是将一些额外的数据与函数对象相关联。func_annotations稍后可以在函数的属性上检查这一点。

除此之外,它没有任何内置行为。目的是让第三方在此基础上构建行为。


ale*_*xis 5

Python的类型提示仅供参考。类型检查或参数类型的自动强制不属于语言的一部分。参见PEP 3107

函数注释无非是在编译时将任意Python表达式与函数的各个部分相关联的一种方式。

该类型提示可以通过附加模块可以用来检查类型的参数和返回值,甚至强迫参数预期的类型。例如,是一个模块,它将检查参数类型并在发现不匹配项时进行投诉。

但这不是Python本身的工作方式,因此不要依赖它,也不要寻找将其引入代码中的方法。以Python风格,您的函数在编写时可以使用的参数类型应尽可能灵活(谷歌“鸭式打字”)。如果他们得到了一些他们无法处理的东西……那就是例外。

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