2017-09-11 16 views
-2

は、Python 3.6.2と はPython 3: "NameError:名前 '関数' が定義されていません"

def foo(bar: function): 
    bar() 

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

を実行すると、期待通りに型注釈が機能削除、しかし

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

得られます。

さらに、PyCharmは、の警告bar()を警告します。


編集:ピータースの答えの私のコメントで述べたように、この質問を上げ、<class 'function'>

def myfunction(): 
    pass 

print(myfunction.__class__) 

出力ため。

答えて

4

名前はfunctionで、Pythonには定義されていません。注釈はPythonの式であり、有効な名前を参照する必要があります。

代わりにタイプヒントを使用して、barであると言うことができます。; typing.Callableを使用します。

from typing import Callable 

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

これは、戻り値は何も(私たちは気にしない)ことができる引数とをとらない呼び出し可能なタイプを定義します。

+0

'print(myfunction .__ class __) 'を介して関数クラスをチェックすると' 'が生成されるので、私はそれが有効であることを期待していました。 – qwertz

+0

@qwertz:確かに、型を参照するグローバル関数 'function'があるわけではありません。 –

関連する問題