【问题标题】:Python3 function definition, arrow and colon [duplicate]Python3函数定义,箭头和冒号[重复]
【发布时间】:2019-06-30 06:53:08
【问题描述】:

我找到了以下python函数定义:

def reverseString(self, s: 'List[str]') -> 'None':

我不太了解 'List[str]'-> 'None'

我发现箭头是function annotation,但我找不到任何对 List[str] 有用和可以理解的东西。

它只是一个注释吗?还是强制参数 s 的类型必须是字符串数组?

【问题讨论】:

  • 是参数的类型注解
  • 只是一个注解。解释器不会强制执行它。见python.org/dev/peps/pep-0484
  • 小心,应该是-> NoneNone 周围没有引号。

标签: python python-3.x function-definition


【解决方案1】:

这是 python3 类型提示的一个实例。使用-> 'None' 表示该函数没有return 语句。

List[str] 更有趣:List 部分表示它将返回一个列表类型,它的参数[str] 表示它是一个参数化类型。在实践中,python 列表可能包含任何类型的对象,但在强类型语言中,列表是同构集合。

使用此提示既向函数的调用者表明s 必须仅包含字符串,从而避免任何将执行的操作的任何异常,也向智能 IDE(例如 PyCharm、VSCode)表明列表中包含的对象具有用于自动完成指示器的字符串实例方法。

python 解释器不会对这些信息进行任何类型检查,但 mypy 解释器会检查您的代码。

有关更多信息,请参阅 PEP 484typing 模块,该模块在 python3 和 2.7 之前的 3.5 和 2.7 之前也是 backported

【讨论】:

  • 你总是可以用return None 结束一个函数,为了清楚起见,我倾向于这样做。因此,-> None 表示函数返回 None,如果没有 return 语句就会发生这种情况,但也可能与return None 一起发生。哦,我不会在 None 周围加上引号(就像 OP 那样)。
【解决方案2】:

只要函数在被调用时总是提供s 值,list[str] 就不会真正发挥作用。我用s: 'something different than list[str]' 尝试了这个函数,它的工作原理是一样的。


关于箭头问题,试试看吧:

def reverseString(self, s: 'List[str]') -> 'None':
    pass

呼叫:

output=reverseString('exampleinput1','exampleinput2')

然后检查输出:

print(c)

type(output)

无类型

关于箭头here的更多信息。

【讨论】:

    【解决方案3】:

    只是python类型提示,可以在PEP 484了解更多

    【讨论】:

    • 我发现PEP 484 abstract 中的示例非常有用。基本上就是函数注解。
    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2018-11-10
    • 2016-12-08
    • 2017-03-02
    • 2023-03-15
    • 2018-08-02
    • 2015-05-02
    相关资源
    最近更新 更多