为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

函数式编程 2019-07-29 11:04:50
什么 - >在Python函数定义中意味着什么?在查看Python 3.3语法规范时,我最近发现了一些有趣的东西:funcdef: 'def' NAME parameters ['->' test] ':' suitePython 2中没有可选的“箭头”块,我在Python 3中找不到任何有关其含义的信息。事实证明这是正确的Python并且它被解释器接受:def f(x) -> 123:     return x我认为这可能是某种先决条件语法,但是:我不能x在这里测试,它仍未定义,无论我在箭头之后放置什么(例如2 < 1),它都不会影响功能行为。任何习惯这种语法的人都可以解释一下吗?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

这是一个功能注释

更详细地说,Python 2.x具有docstrings,允许您将元数据字符串附加到各种类型的对象。这非常方便,因此Python 3通过允许您将元数据附加到描述其参数和返回值的函数来扩展该功能。

没有先入为主的用例,但PEP提出了几个建议。一个非常方便的方法是允许您使用预期类型注释参数; 然后很容易编写一个装饰器来验证注释或强制正确类型的参数。另一种方法是允许特定于参数的文档,而不是将其编码到docstring中。



查看完整回答
反对 回复 2019-07-29
?
长风秋雁

TA贡献1757条经验 获得超7个赞

正如其他答案所述,该->符号用作功能注释的一部分。>= 3.5但是,在更新版本的Python中,它具有已定义的含义。

PEP 3107 - 功能注释描述了规范,定义了语法变化,func.__annotations__存储它们的存在以及它的用例仍然是开放的这一事实。

但是在Python中3.5PEP 484 - Type Hints附加了一个含义:->用于指示函数返回的类型。它似乎也将在未来版本中强制执行,如注释的现有用法

最快的可想到的方案将引入静态弃用3.6中的非类型提示注释,3.7中的完全弃用,并声明类型提示作为Python 3.8中唯一允许使用的注释。

(强调我的)

3.6到目前为止,我还没有真正实现这一点,因此它可能会受到未来版本的影响。

根据这个,您提供的示例:

def f(x) -> 123:
    return x

将来会被禁止(并且在当前版本中会令人困惑),需要将其更改为:

def f(x) -> int:
    return x

为了它有效地描述该函数f返回一个类型的对象int

Python本身并没有以任何方式使用注释,它几乎填充并忽略它们。由第三方库来决定它们。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 2019 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信