2

関数内にグローバル変数を作成できます。

def f():
    global x
    x=1

f()
print x

しかし、f()にその変数の名前しかない場合、同じことを行うことができますか?

def f(varname):
    exec('global ' + varname)
    exec(varname + '=1')

f('x')
print x

これは機能しません-「名前'x'は定義されていません」。これがひどいプログラミングスタイルだと言わないでください-私はそれを知っています。問題は、これがPythonで実行できるかどうかです。

回答ありがとうございますが、なぜexecが機能しなかったのかという疑問が残ります。どういうわけか別のコンテキストで実行されていますか?別のモジュールの一部であるため、別のモジュールにグローバル変数が作成されますか?

4

4 に答える 4

4
In [1]: globals()['x'] = 42

In [2]: x
Out[2]: 42

関数内から実行した場合も同じように機能します。

于 2012-05-03T15:22:06.270 に答える
4

はい、そのためにglobals()を使用できます。

globals()['whatever'] = 123

(そして、これはあまり良いスタイルではないことに気付くのは良いことです)

于 2012-05-03T15:23:05.197 に答える
2

グローバル関数を使用する

globals()[varname] = value

globals関数は、モジュールのグローバル変数を含むdictを返します。

于 2012-05-03T15:24:25.587 に答える
1

あなたは、他の答えを見ることができました。

しかし、あなたは本当にすべきではありません。

グローバル変数が自動的に悪い考えであるというわけではありません。f()より大きな問題は、またはへの単純な呼び出しを見ると、f(x)ローカル(つまり、この場合はグローバル)スコープを変更しただけではわからないということです。

def f():
    return 1

x = f()
print x

まったく同じことを行いますが、そのスコープ内のスコープで何が起こっているかを文書化します。

于 2012-05-03T15:31:18.687 に答える