【问题标题】:Function parameter with colon [duplicate]带冒号的函数参数[重复]
【发布时间】:2019-07-24 13:30:40
【问题描述】:

我刚刚遇到了这个功能:

def splitComma(line: str):
    splits = Utils.COMMA_DELIMITER.split(line)
    return "{}, {}".format(splits[1], splits[2])

我知道您可以用 分隔参数,或者可以在 a=39 之类的参数中设置一个值,但我没有看到像 line:str 这样的冒号。我已经在线检查了函数定义,但找不到这样的东西。这个冒号是什么意思?

【问题讨论】:

  • 注意:副本讨论了变量注释,这是 Python 3.6 的新内容。这是一个普通的函数注解,它是在 Python 3.0 中引入的。

标签: python function


【解决方案1】:

这是一个函数注解;函数参数和返回值可以用任意 Python 表达式标记。 Python 本身会忽略注释(除了保存),但第三方工具可以使用它们。

在这种情况下,它的目的是作为类型提示:像mypy 这样的程序可以静态分析您的代码(也就是说,不运行它,而只查看源代码本身)以确保只有 str 值是作为参数传递给splitComma

更完整的注释也指定函数的返回类型:

def splitComma(line: str) -> str:
    ...

(请注意,最初并没有假设函数注释具有任何特定的语义。这仍然是正确的,但是现在压倒性的假设是注释提供了类型提示。)

【讨论】:

  • 感谢您的出色回答。这对于来自强制设置输入和输出类型的语言的人来说尤其有趣。
  • 天啊,我在一次编程面试中遇到了这个问题。我在想,“那是什么鬼???” xD 不用说,我没有得到这份工作。
  • "一个更完整的注释来指定函数的返回类型:"你的意思是函数注释?
  • @Geeocode 不,更全面; OP 仅在参数上提供注释,而不是参数和返回类型。
  • 谢谢chepner,第一次阅读我认为“fuller”是一个特殊的概念,我不知道,但现在我意识到这就是fuller的字面意思。
【解决方案2】:

这是静态分析工具用来检查类型的type annotation。它有助于在您运行代码之前确保程序的正确性。

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多