5

Pythonスクリプトで設定された変数を反復処理しようとしています。私は次のことに出くわしました:

[ここであなたの好きな言語]のプログラムのすべての変数を列挙またはリストします

そして最初の例では:

#!/us/bin/python                                                                                    

foo1 = "Hello world"
foo2 = "bar"
foo3 = {"1":"a", "2":"b"}
foo4 = "1+1"

for name in dir():
    myvalue = eval(name)
    print name, "is", type(name), "and is equal to ", myvalue

メモリに保存されているすべての変数が一覧表示されます。スクリプトで作成した変数を分離し、デフォルトで作成されたシステム変数を一覧表示したくない。これを行う方法はありますか?

4

5 に答える 5

9

変数の前にアンダースコアを付けない場合は、次のことができます。

#!/us/bin/python                                                                                    

foo1 = "Hello world"
foo2 = "bar"
foo3 = {"1":"a", "2":"b"}
foo4 = "1+1"

for name in dir():
    if not name.startswith('__'):
        myvalue = eval(name)
        print name, "is", type(myvalue), "and is equal to ", myvalue
于 2012-04-24T16:41:22.383 に答える
9

__builtins__次のように、組み込みモジュールに含まれているかどうかを確認することで、デフォルトでモジュールに含まれている変数を取り除くことができます。

>>> x = 3
>>> set(dir()) - set(dir(__builtins__))
set(['__builtins__', 'x'])

これが取り除かない唯一のものは__builtins__それ自体であり、これは特殊なケースになりやすいです。

また、組み込みの名前を再定義した場合、これは機能しないことに注意してください。実際にはこれを行うべきではありませんが、多くの人が偶然に行っています。

于 2012-04-24T16:45:02.030 に答える
2

これが解決策です。

#!/us/bin/python    

not_my_data = set(dir())

foo1 = "Hello world"
foo2 = "bar"
foo3 = {"1":"a", "2":"b"}
foo4 = "1+1"

my_data = set(dir()) - not_my_data

for name in my_data :
    myvalue = eval(name)
    print name, "is", type(name), "and is equal to ", myvalue

しかし、これは悪い習慣です。

次のようなものを使用する必要があります

#!/us/bin/python    
my_data = dict()                                                                                   
my_data['foo1'] = "Hello world"
my_data['foo2'] = "bar"
my_data['foo1'] = {"1":"a", "2":"b"}
my_data['foo1'] = "1+1"

for name in my_data :
    myvalue = eval(my_data[name])
    print name, "is", type(name), "and is equal to ", myvalue
于 2012-04-24T18:29:51.020 に答える