2017-09-11 57 views
-2

運行Python 3中: 「NameError:名稱 '功能' 未定義」

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


編輯:正如我皮特斯的回答,這個問題提出的意見指出,因爲

def myfunction(): 
    pass 

print(myfunction.__class__) 

輸出<class 'function'>

回答

4

Python中沒有定義名稱function,沒有。註釋仍然是Python表達式,並且必須引用有效的名稱。

你可以改爲使用類型提示來說bar是一個可調用;使用typing.Callable

from typing import Callable 

def foo(bar: Callable[[], Any]): 
    bar() 

定義一個可調用類型,它沒有參數並且其返回值可以是任何東西(我們不關心)。

+0

謝謝,我期待它是有效的,因爲通過檢查函數類,通過print(myfunction .__ class __)產生''。 – qwertz

+0

@qwertz:當然,但這並不意味着有一個引用類型的全局名稱'function'。 –