【问题标题】:How to indicate that a function expects a function as a parameter, or returns a function, via function annotations?如何通过函数注释指示函数期望函数作为参数或返回函数?
【发布时间】:2014-01-08 20:05:39
【问题描述】:

你可以在python 3中使用function annotations来表示参数和返回值的类型,如下所示:

def myfunction(name: str, age: int) -> str:
    return name + str(age) #usefulfunction

但是,如果您正在编写一个期望函数作为参数或返回一个参数的函数呢?

我意识到您可以为注释编写任何有效的表达式,因此我可以将“函数”编写为字符串,但这是最好/唯一的方法吗?有没有像内置类型int/float/str/list/dict 等的东西?我知道callable,但我想知道是否还有其他内容。

【问题讨论】:

    标签: python function python-3.x annotations


    【解决方案1】:

    非常有趣...我什至从未听说过 Python 3 中的函数注释。解释器中的以下代码建议您可以使用function 代替strint。只是我的两分钱。

    >>> a = lambda x: x*2
    >>> type(a)
    <class 'function'>
    

    【讨论】:

    • 别难过,直到一个小时前我也没有。每天学习新东西......
    • type(a) where a is an int 给出 有单引号的 int,就像你的例子中的函数一样,但我们不在 int 周围使用单引号在 Python 3 中将其用作类型注释时。
    • 我尝试了@SimonT 在这里的建议,因为我认为这也是正确的解决方案。然而,我发现在检查注释时这没有预期的结果:{'expected_function': &lt;class 'dict'&gt;}。相反,您会得到{'expected_function': 'function'},这使得程序似乎希望您将文字字符串“function”传递给方法。
    • @eikonomega 这现在真的很奇怪。
    【解决方案2】:

    没有为注释定义样式。使用callabletypes.FunctionType 或字符串。

    PS:callable 在 Python 3.0 和 3.1 中不可用

    【讨论】:

    • 我建议不要使用callable,因为它会导致&lt;built-in function callable&gt; 被返回给__annotations__ 而不是&lt;class 'function'&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多