3

現在のスコープを指す参照はありますか?多くの記事を検索しましたが、答えが見つかりませんでした。たとえば、現在のスコープ内のすべての変数のコンテンツを印刷したい

for x in list(locals()):
    print(x)

しかし、これだけを教えてください、変数の名前

__builtins__
__file__
__package__
__cached__
__name__
__doc__

私はこのようなコードを望んでいません

print(__builtins__)
print(__file__)
print(__package__)
print(__cached__)
print(__name__)
print(__doc__)
....
4

4 に答える 4

4

値を取得するには、次を使用できます。

for symbol, value in locals().items():
    print symbol, value

locals()はあなたにdictを与えます。dictを繰り返すと、そのキーが得られます。(キー、値)ペアのリストを取得するには、itemsメソッドを使用します。

于 2012-08-31T09:11:10.533 に答える
4

大規模なやり過ぎ...ローカル名前空間のフィルタリングと出力を関数でラップします。

これはお勧めしません。私はそれができることを示し、コメントを得るために主にそれを投稿しています。

import inspect

def print_local_namespace():
    ns = inspect.stack()[1][0].f_locals
    for k, v in ns.iteritems():
        if not k.startswith('__'):
            print '{0} : {1}'.format(k, v)


def test(a, b):
    c = 'Freely'
    print_local_namespace()
    return a + b + c


test('I', 'P')
于 2012-08-31T09:56:29.420 に答える
2

locals()で始まらない変数名のみを出力するには'__'

for local_var in list(locals()):
    if not local_var.startswith('__'): print local_var
于 2012-08-31T09:01:33.807 に答える
2

「現在のスコープ」とはどういう意味ですか?ローカル変数のみを意味する場合locals()は、正解です。使用できるすべての識別子[ローカル+グローバル+非ローカル]を意味する場合、物事は混乱します。おそらくもっと簡単な解決策はこれです。

変数が必要ない場合は__.*__、フィルターで除外してください。

于 2012-08-31T09:44:05.673 に答える