3

変数の名前を引数として関数を呼び出すときに、いくつかの変数を割り当てる必要があります。

locals()したがって、目的の名前を持つタプルをループし、 dictを介して割り当てます。

それは機能しますが、関数自体の内部であっても、名前でアクセスできません。

def function():
    var_names = ("foo","bar","foobar")
    for var_name in var_names:
        locals()[var_name] = len(var_name)
    print foo

スロー:

Traceback (most recent call last):
  File "error_test.py", line 8, in <module>
    function()
  File "error_test.py", line 5, in function
    print foo
NameError: global name 'foo' is not defined

次のコードを使用すると、うまく機能します。

def function():
    var_names = ("foo","bar","foobar")
    for var_name in var_names:
        locals()[var_name] = len(var_name)
    print locals()["foo"]

locals()dict には通常の関数変数だけが含まれているのではないでしょうか? なぜ機能しないのですか?

4

2 に答える 2

1

あなたが書くとき:

for var_name in var_names:
    locals()[var_name] = len(var_name)

locals()ディクショナリを次のように変更します。

ドキュメントで適切にリンクされている@ user2357112として:

ノート

このディクショナリの内容は変更しないでください。変更は、インタープリターによって使用されるローカルおよびフリー変数の値に影響しない場合があります。

したがって、変更するlocals()とローカル変数が削除されるため、NameError: global name 'foo' is not definedエラーが発生します。

于 2015-12-28T21:50:30.380 に答える