私は関数の利用可能な詳細を表示するイントロスペクション・スタンザを作成したいとします。次のコードの下のような
何か:Pythonの属性名を印刷するには?
def sample(_range=4):
""" produce a range of integers """
for i in range(_range):
yield i
f = sample
for i in (f.__name__, f.__doc__, f.__dict__, f.__code__, f.__defaults__, f.__globals__, f.__closure__):
print("XXX", i)
私が代わりに
XXX sample
XXX produce a range of integers
XXX {}
XXX <code object sample at 0xfff15890, file "/tmp/tmp.py", line 1>
XXX (4,)
XXX {'__loader__': <_frozen_importlib.SourceFileLoader object at 0xfff13b30>, '__package__': None, '__file__': '/tmp/tmp.py', '__cached__': None, 'i': {...}, 'f': <function sample at 0xfff5b1e0>, '__builtins__': <module 'builtins' (built-in)>, '__doc__': None, '__spec__': None, '__name__': '__main__', 'sample': <function sample at 0xfff5b1e0>}
XXX None
私は」は、例えば属性名を印刷何か、にXXX
を変更している達成するために失敗していますあなたが持っているように
__name__ sample
__doc__ produce a range of integers
__dict__ {}
__code__ <code object sample at 0xfff15890, file "/tmp/tmp.py", line 1>
__defaults__ (4,)
f.__globals__ {'__loader__': <_frozen_importlib.SourceFileLoader object at 0xfff13b30>, '__package__': None, '__file__': '/tmp/tmp.py', '__cached__': None, 'i': {...}, 'f': <function sample at 0xfff5b1e0>, '__builtins__': <module 'builtins' (built-in)>, '__doc__': None, '__spec__': None, '__name__': '__main__', 'sample': <function sample at 0xfff5b1e0>}
__closure__ None
XXX
の代わりに何をお勧めしますか?
あなたは辞書を使うだろうか?属性としてのキーと値としての名前 –
代わりに名前を反復処理してみませんか? '[__name__ '、' __doc__ '、...]の名前は' ... 'です。 – jonrsharpe
@MosesKoledoyeはフードの下で、まさに 'sample'オブジェクトです! – jonrsharpe