运行
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还在行'function' object is not callable
上发出警告bar()
。
编辑:正如我对Pieters的回答所述,这个问题提出来了,因为
def myfunction():
pass
print(myfunction.__class__)
输出<class 'function'>
。
答案 0 :(得分:7)
Python中没有定义名称bar
,没有。注释仍然是Python表达式,必须引用有效名称。
您可以改为使用类型提示来说from typing import Callable
def foo(bar: Callable[[], Any]):
bar()
是可调用的;使用typing.Callable
:
max
这定义了一个不带参数的可调用类型,其返回值可以是任何值(我们不关心)。