動的変数名への代入
tkinter を使用する際に動的変数を生成する必要があります。例えば var1...var10 変数を動的に生成します。
exec を使用した動的代入
exec は Python3 における組み込み関数で、Python コードの動的実行をサポートします。
exec を使用した動的代入
exec は Python3 における組み込み関数で、Python コードの動的実行をサポートします。
例
>>> for i in range(5):
... exec('var{} = {}'.format(i, i))
...
>>> print(var0, var1, var2, var3 ,var4)
0 1 2 3 4
>>>
... exec('var{} = {}'.format(i, i))
...
>>> print(var0, var1, var2, var3 ,var4)
0 1 2 3 4
>>>
名前空間を利用した動的代入
Python の名前空間では、変数名と値が辞書として格納されています。locals()、globals() 関数を使用すると、それぞれローカル名前空間とグローバル名前空間を取得できます。
例
>>> names = locals()
>>> for i in range(5):
... names['n' + str(i) ] = i
...
>>> print(n0, n1, n2, n3, n4)
0 1 2 3 4
>>>
>>> for i in range(5):
... names['n' + str(i) ] = i
...
>>> print(n0, n1, n2, n3, n4)
0 1 2 3 4
>>>
クラスでの動的変数の使用
Python のクラスオブジェクトの属性は __dict__ に格納されています。__dict__ は辞書であり、キーが属性名、値が属性の値に対応します。
例
>>> print(n0, n1, n2, n3, n4)
0 1 2 3 4
>>> class Test_class(object):
... def __init__(self):
... names = self.__dict__
... for i in range(5):
... names['n' + str(i)] = i
...
>>> t = Test_class()
>>> print(t.n0, t.n1, t.n2, t.n3, t.n4)
0 1 2 3 4
0 1 2 3 4
>>> class Test_class(object):
... def __init__(self):
... names = self.__dict__
... for i in range(5):
... names['n' + str(i)] = i
...
>>> t = Test_class()
>>> print(t.n0, t.n1, t.n2, t.n3, t.n4)
0 1 2 3 4
動的変数の呼び出し
実際、繰り返し使用する変数については、通常 var0, var1, var2, var3, var4....varN のように個別に呼び出すことはしません。以下の方法で変数を動的に呼び出すことができます。
まず以下のように変数を定義します:
例
>>> for i in range(5):
... exec('var{} = {}'.format(i, i))
...
>>> print(var0, var1, var2, var3 ,var4)
0 1 2 3 4
... exec('var{} = {}'.format(i, i))
...
>>> print(var0, var1, var2, var3 ,var4)
0 1 2 3 4
exec 関数を利用する
同様に、exec を使用して変数を呼び出すこともできます
例
>>> for i in range(5):
... exec('print(var{}, end=" ")'.format(i))
...
0 1 2 3 4
... exec('print(var{}, end=" ")'.format(i))
...
0 1 2 3 4
名前空間を利用する
locals() と globals() はどちらも辞書を返すため、辞書の get メソッドを利用して変数の値を取得します。
例
>>> names = locals()
>>> for i in range(5):
... print(names.get('var' + str(i)), end=' ')
...
0 1 2 3 4
>>> for i in range(5):
... print(names.get('var' + str(i)), end=' ')
...
0 1 2 3 4
原文アドレス:https://www.cnblogs.com/technologylife/p/9211324.html