相关疑难解决方法(0)

什么 - >在Python函数定义中意味着什么?

在查看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),它都不会影响功能行为.

任何习惯这种语法的人都可以解释一下吗?

python annotations python-3.x function-definition

383
推荐指数
9
解决办法
14万
查看次数

Python类型提示语法如何/为何起作用?

我刚看到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)

似乎在: …

python type-hinting pep python-3.x

18
推荐指数
1
解决办法
4387
查看次数