在查看Python 3.3语法规范时,我最近发现了一些有趣的东西:
funcdef: 'def' NAME parameters ['->' test] ':' suite
Run Code Online (Sandbox Code Playgroud)
Python 2中没有可选的"箭头"块,我在Python 3中找不到任何有关其含义的信息.事实证明这是正确的Python并且它被解释器接受:
def f(x) -> 123:
return x
Run Code Online (Sandbox Code Playgroud)
我认为这可能是某种先决条件语法,但是:
x在这里测试,它仍未定义,2 < 1),它都不会影响功能行为.任何习惯这种语法的人都可以解释一下吗?
我刚看到PEP 484中的以下示例:
def greeting(name: str) -> str:
return 'Hello ' + name
print(greeting('Martin'))
print(greeting(1))
Run Code Online (Sandbox Code Playgroud)
正如所料,这在Python 2中不起作用:
File "test.py", line 1
def greeting(name: str) -> str:
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
但是,它适用于Python 3:
Hello Martin
Traceback (most recent call last):
File "test.py", line 5, in <module>
print(greeting(1))
File "test.py", line 2, in greeting
return 'Hello ' + name
TypeError: Can't convert 'int' object to str implicitly
Run Code Online (Sandbox Code Playgroud)
这是出乎意料的.它还没有真正检查类型,正如您可以看到以下示例(它运行,但不会抛出异常):
def greeting(name: str) -> int:
return 'Hello ' + name
print(greeting('Martin'))
Run Code Online (Sandbox Code Playgroud)
似乎在: …