2017-02-13 5 views
1

__builtins__に記載されているものがTrueから返るかどうかチェックしたいと思います。私はthose関数のリストをPythonのドキュメントに返すことを望んでいます。 AttributeErrorなどの追加項目がcallableの場合はTrueと返されます。これは問題ありません。私は(原因eval(print)に)それを呼び出すとき__builtins__がlist comprehensionを使用して呼び出し可能かどうかを確認してください。エラーが発生しないようにeval(print)

次はSyntaxErrorを返します。eval(print)からスローエラーをsidesteppingながら

[callable(eval(x)) for x in dir(__builtins__)] 
SyntaxError: unexpected EOF while parsing 

どのようにテストすることができ__builtins__のそれらのどれが呼び出し可能な機能ですか?これを行うための

答えて

2

より堅牢な方法は、getattrを使用することです:

>>> [callable(getattr(__builtins__, attr)) for attr in dir(__builtins__)] 
[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, True, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, True, True, True, True, True, True, True, True, True, True, False, True, False, False, True, True, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True] 
>>> 
3

かわりevalgetattrを使用する必要があります。

builtins = map(lambda obj: getattr(__builtins__, obj), dir(__builtins__)) 

次にあなたが呼び出し可能オブジェクトの結果をフィルタリングすることができます。

filter(callable, builtins) 

e inspect.getmembers。結果をフィルタリングするオプションの引数を使用することもできます。

inspect.getmembers(__builtins__, callable) 
関連する問題