2017-02-09 1 views
2

私は、スクリプトのデバッグモードのためにいくつかの印刷物を書いています。条件を満たすリスト内の変数の名前を簡潔に表示する方法はありますか?ただ、9000 suggestsとしてPythonでは、条件を満たすリスト内の変数の名前を簡潔に表示する方法はありますか?

specification_aw3 = 43534 
specification_hg7 = 75445 
specification_rt5 = 0 
specification_nj8 = 5778 
specification_lo4 = 34 
specification_ee2 = 8785 
specification_ma2 = 67 
specification_pw1 = 1234 
specification_mu6 = 0 
specification_xu8 = 12465 

specifications = [ 
    specification_aw3, 
    specification_hg7, 
    specification_rt5, 
    specification_nj8, 
    specification_lo4, 
    specification_ee2, 
    specification_ma2, 
    specification_pw1, 
    specification_mu6, 
    specification_xu8 
] 

if any(specification == 0 for specification in specifications): 
    # magic code to print variables' names 
    # e.g. "variables equal to 0: \"specification_rt5\", \"specification_mu6\" 

、それは辞書を定義すること、私がここで定義されている最小限の作業例について合理的なアプローチであることは言うまでもないです。これは既存のコードプロジェクトの実現可能な選択肢ではなく、デバッグのために使用するコードを素早くコンパクトにすることをお勧めします。


編集:私は

だからここに欲しいものに似た何かのイラストは、私が探しているものの始まりです:基本的に

print("specifications equal to zero:") 
callers_local_objects = inspect.currentframe().f_back.f_locals.items() 
for specification in [specification for specification in specifications if specification == 0]: 
    print([object_name for object_name, object_instance in callers_local_objects if object_instance is specification][0]) 

、何かをするコンパクトな方法がありますこのような?

+2

辞書を使用する必要があります。 –

+0

変数名にはデータを含めないでください。 'specification_xu8'をどこでも' asflaskjflasjflsajfls'で置き換えることができないなら、あなたは間違っています。 – chepner

+1

それはどこですか? –

答えて

12

私の代わりに、あなたが辞書を使用する変数の束のことを示唆している:

specification = { 
    'aw3': 0, 
    'foo': 1, 
    'bar': 1.23, 
    # etc 
} 

あなたはspecification['aw3']のような名前で物事をアクセスすることができます。

for element in specification_dictionary: 
    print(element) 

どこでそれを組み合わせることができます:あなたが行は次のようになり、印刷に述べたことから、さらに

zeroed = [name for (name, value) in specification.items() if value == 0] 
1

はその後、値が0されている名前を見つけることができますあなたのケースに合った要素だけを印刷するための上記のようなリストの理解。この場合の要素は、keyとvalueの両方がspecification_dictionary.items()を使用するように設定したければ、変数名(key)のみを出力します。乾杯。

>>> specification = { 'aw3': 0, 'foo': 1} 
>>> for element in specification: 
...  print(element) 
... 
foo 
aw3 
>>> for (key, value) in specification.items(): 
...  print(str(key) + " " + str(value)) 
... 
foo 1 
aw3 0 
>>> for element in specification.items(): 
...  print(element) 
... 
('foo', 1) 
('aw3', 0) 
関連する問題