2017-09-25 9 views
-3

私はPythonで潜水し、いくつかの組み込み関数を評価しようとしていました。 dir関数は、指定されたモジュールのすべての属性の名前を含む文字列リストを返します。そのため、私は次のコードセグメントを実行する場合、私は空のリストを取得する :すべてのモジュールのメソッドと属性をオブジェクトのリストとして一覧表示します

import string 
[x for x in dir(string) if callable(x) ] 

は、私がオブジェクトの代わりに、行の文字列のリストを取得するためdir(string)と組み合わせることができ、そこ他の機能または他の方法ですか?

私の目標は次のように何かをすることです:dive in python book

methodList = [method for method in dir(object) if callable(getattr(object, method))] 

答えて

3

を返して、なぜあなたのケースでは、それは、それはだていませんこれらは実際の属性値ではなく、名前です。

あなたはstringモジュールの属性としてそれらの名前をテストしたい場合、あなたはgetattr()を使用する必要があり、または辞書としてstrings名前空間を取得するためにvars() functionを使用したい:

>>> getattr(string, 'Formatter') 
<class 'string.Formatter'> 
>>> callable(getattr(string, 'Formatter')) 
True 
>>> [name for name in dir(string) if callable(getattr(string, name))] 
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', 'capwords'] 
>>> [name for name, obj in vars(string).items() if callable(obj)] 
['capwords', '_ChainMap', '_TemplateMetaclass', 'Template', 'Formatter'] 

順序が異なりますここではdictionaries are unordereddir()は常に戻り値をソートするためです。 モジュールの場合、dir(module)は単にsorted(vars(module))を返します。

あなたが名前を呼び出し可能オブジェクト自体を望んでいたとされていない場合、単にvars()辞書のフィルタリング:

[obj for obj in vars(string).values() if callable(obj)] 
+0

をノー、ここでそれをリンクしませんでしたが、私はそれを結ぶ検討しました。私の謝罪、私はあなたがそれを読んだと思った。繰り返しますが、コメントは一過性です。あなたが私の投稿を批判していたなら、私はコメントに触れなかったでしょう(私は多くの場合、他のモッズにそれらを見るように頼んでいたでしょう)。もし私がここでクリーンアップするのが速すぎると感じたら、別の人に見てもらうように頼んでみましょう。それは、私が自分の投稿の下のコメントを私が廃止されたと見なしたときに、そのコメントをクリーンアップしないと、*する前に長い時間がかかることがあります。私はちょうどここで自分自身を整頓している。 –

+0

ありがとう、すべての妥当な音。別のMODが見える必要はありません。私はそれが主に私を悩ましていたtiminigだと思う。 –

+0

私は質問を更新しました、それは悪い公式でした。アイデアはありますか? –

-1

callable(x)チェックの例のようなものがxある

import string 
[ x for x in ***(dir(string)) if callable(x) ] 

としない__call__()メソッドを持つオブジェクトです。 ;

>>> import string 
>>> dir(string) 
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace'] 

文字列値は呼び出し可能ではありません。dir()文字列のリストを返すので、理解だ空のリスト

関連する問題