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

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

在查看Python 3.3语法规范时,我最近发现了一些有趣的东西:

funcdef: 'def' NAME parameters ['->' test] ':' suite

Python 2中没有可选的“箭头”块,我在Python 3中找不到任何有关其含义的信息。事实证明这是正确的Python并且它被解释器接受:

def f(x) -> 123:
    return x

我认为这可能是某种先决条件语法,但是:

  • 我不能x在这里测试,它仍未定义,

  • 无论我在箭头之后放置什么(例如2 < 1),它都不会影响功能行为。

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


函数式编程
浏览 2020回答 3
3回答

RISEBY

这是一个功能注释。更详细地说,Python 2.x具有docstrings,允许您将元数据字符串附加到各种类型的对象。这非常方便,因此Python 3通过允许您将元数据附加到描述其参数和返回值的函数来扩展该功能。没有先入为主的用例,但PEP提出了几个建议。一个非常方便的方法是允许您使用预期类型注释参数;&nbsp;然后很容易编写一个装饰器来验证注释或强制正确类型的参数。另一种方法是允许特定于参数的文档,而不是将其编码到docstring中。

长风秋雁

正如其他答案所述,该->符号用作功能注释的一部分。>= 3.5但是,在更新版本的Python中,它具有已定义的含义。PEP 3107 - 功能注释描述了规范,定义了语法变化,func.__annotations__存储它们的存在以及它的用例仍然是开放的这一事实。但是在Python中3.5,PEP 484 - Type Hints附加了一个含义:->用于指示函数返回的类型。它似乎也将在未来版本中强制执行,如注释的现有用法:最快的可想到的方案将引入静态弃用3.6中的非类型提示注释,3.7中的完全弃用,并声明类型提示作为Python 3.8中唯一允许使用的注释。(强调我的)3.6到目前为止,我还没有真正实现这一点,因此它可能会受到未来版本的影响。根据这个,您提供的示例:def&nbsp;f(x)&nbsp;->&nbsp;123: &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x将来会被禁止(并且在当前版本中会令人困惑),需要将其更改为:def&nbsp;f(x)&nbsp;->&nbsp;int: &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x为了它有效地描述该函数f返回一个类型的对象int。Python本身并没有以任何方式使用注释,它几乎填充并忽略它们。由第三方库来决定它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python