【问题标题】:Python 3: "NameError: name 'function' is not defined"Python 3:“名称错误:未定义名称‘函数’”
【发布时间】:2017-09-11 20:11:55
【问题描述】:

跑步

def foo(bar: function):
    bar()

foo(lambda: print("Greetings from lambda."))

使用 Python 3.6.2 产生

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined

但是,删除类型注释按预期工作。

PyCharm 还在bar() 行上给出警告'function' object is not callable


编辑:正如我在对 Pieters 回答的评论中所述,提出了这个问题,因为

def myfunction():
    pass

print(myfunction.__class__)

输出&lt;class 'function'&gt;

【问题讨论】:

    标签: python python-3.x pycharm


    【解决方案1】:

    Python 中没有定义名称function,没有。注释仍然是 Python 表达式,并且必须引用有效的名称。

    您可以改为使用类型提示来表示bar 是一个可调用;使用typing.Callable:

    from typing import Any, Callable
    
    def foo(bar: Callable[[], Any]):
        bar()
    

    这定义了一个不带参数的可调用类型,它的返回值可以是任何东西(我们不在乎)。

    【讨论】:

    • 谢谢,我原以为它是有效的,因为通过print(myfunction.__class__) 检查函数类会产生&lt;class 'function'&gt;
    • @qwertz:当然,但这并不意味着有一个全局名称 function 引用该类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 2022-01-01
    • 2015-02-12
    • 2019-11-13
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多