我对Python很新,很高兴发现Python3中的类型提示功能。我通读了PEP 484并找到this question on SO,其中提问的人想知道为什么函数的返回类型没有被检查。受访者指出PEP 484中的一个部分表示检查不会在运行时发生,并且意图是类型提示将由外部程序解析。
我启动了python3 REPL并决定试试这个
>>> def greeting() -> str: return 1
>>> greeting()
1
到目前为止一切顺利。我对函数参数感到好奇,所以我尝试了这个:
>>> def greeting2(name: str) -> str: return 'hi ' + name
>>> greeting2(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in greeting2
TypeError: Can't convert 'int' object to str implicitly
现在这是轮子似乎脱落的地方,因为看起来,至少在功能参数方面,有检查。我的问题是为什么检查参数而不是返回类型?
答案 0 :(得分:5)
Python在运行时不使用类型提示(不是函数参数也不是返回类型)。它与以下内容没有什么不同:
>>> def greeting3(name): return 'hi ' + name
...
>>> greeting3(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in greeting3
TypeError: Can't convert 'int' object to str implicitly
你得到的是TypeError,因为你试图连接一个字符串和一个整数:
>>> 'hi ' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
如上所述,类型提示不会在运行时检查,它们打算在编辑器/工具的开发过程中使用。