Python動的変数名の定義と呼び出し方法
4074 ワード
動的変数名付与tkinterを使用する場合、動的生成var 1などの変数を動的に生成する必要があります.var 10変数.
execダイナミック割り当ての使用
例:
ネーミングスペースによる動的割り当て
Pythonのネーミングスペースでは、変数名と値を辞書に格納し、
例
クラスでの動的変数の使用
Pythonのクラスオブジェクトの属性は、の
例
動的変数の呼び出し
実際、重複性の変数については、var 0、var 1、var 2、var 3、var 4などの変数を呼び出すことは一般的ではない.varNは、次の方法で変数を動的に呼び出すことができます.
まず、次の変数を定義します.
例
exec関数の使用
同様に、
ネーミングスペースの活用
コマンド空間の
以下は他のネットユーザーの補足です.
Python動的変数の定義
問題の説明
データ処理をする時、いくつかグループ化して得たデータに対して、した操作は大同小異で、変数の命名もすべて同じ構造を持って、例えば毎月のデータに対して平均値、分散などの統計量を求めて、変数の命名は“n月の平均値”、“n月の分散”と取ることができて、抽象的に“n月の'm統計量”です
プログラミング実装の際には,上記変数の定義や参照を共に実装することで,重複コードの数を減らすことができる.
実装時に動的に変数を定義する問題に遭遇したが,ここでまとめてみる.
execによる変数の動的定義
変数をこのように動的に定義できます
一般に、この文は変数を正しく定義できますが、後方から入力されたexpressionがDataFrameGroupクラス変数を返すと、構文エラーが発生することがあります.
File "", line 1 month_12 = ^ SyntaxError: invalid syntax
原因は不明...検索してみると、上記の問題を解決する別の定義方法があることがわかりました.
この方法には2つの問題があります.
1、formatで置換する部分は変数名の最後に、例month_{},こそ実行に成功するが,{}monthは実行できません.原因は調べなければなりません.皆さんに教えてください.
File "", line 1 12_month = temp ^ SyntaxError: invalid token
2、この方法で定義された変数は、execでのみ有効であり、exec文の外では無効である.これはpythonがexecの複雑な命令を局所変数としているためか、以下の文で検証できる
ここでlocals()とglobals()はpythonの内部メソッドであり、辞書ベースのローカル変数とグローバル変数へのアクセス方法を提供します.
Trueを返すと、現在の環境がグローバルレベルであることを示し、execの文はexecの外で有効になります.
Falseを返すと、当期環境がローカルレベルにあることを示し、定義された変数はローカル変数とみなされるため、execでは外注できず、文にglobals()を入力してグローバルに有効にすることができます.
ネーミングスペースを使用した変数の動的定義
まずlocals()のコピーを作成します
varDict = locals()
上記の変数については、このように定義できます.
この方法で作成した変数は、最初の方法で文法エラーと変数の役割ドメインのエラーは発生しません.推奨します.
execダイナミック割り当ての使用
exec
python 3には、pythonコードの動的実行をサポートする内蔵関数です.例:
In [1]: for i in range(5):
...: exec('var{} = {}'.format(i, i))
...:
In [2]: 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
>>>
クラスでの動的変数の使用
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
動的変数の呼び出し
実際、重複性の変数については、var 0、var 1、var 2、var 3、var 4などの変数を呼び出すことは一般的ではない.varNは、次の方法で変数を動的に呼び出すことができます.
まず、次の変数を定義します.
例
>>> for i in range(5):
... exec('var{} = {}'.format(i, i))
...
>>> print(var0, var1, var2, var3 ,var4)
0 1 2 3 4
exec関数の使用
同様に、
exec
変数を呼び出すことができる
In [3]: for i in range(5):
...: exec('print(var{}, end=" ")'.format(i))
...:
0 1 2 3 4
ネーミングスペースの活用
コマンド空間の
locals()
とglobals()
はいずれも辞書を返すので、辞書のgetメソッドで変数の値を取得する
In [4]: names = locals()
In [5]: for i in range(5):
...: print(names.get('var' + str(i)), end=' ')
...:
0 1 2 3 4
以下は他のネットユーザーの補足です.
Python動的変数の定義
問題の説明
データ処理をする時、いくつかグループ化して得たデータに対して、した操作は大同小異で、変数の命名もすべて同じ構造を持って、例えば毎月のデータに対して平均値、分散などの統計量を求めて、変数の命名は“n月の平均値”、“n月の分散”と取ることができて、抽象的に“n月の'm統計量”です
プログラミング実装の際には,上記変数の定義や参照を共に実装することで,重複コードの数を減らすことができる.
実装時に動的に変数を定義する問題に遭遇したが,ここでまとめてみる.
execによる変数の動的定義
変数をこのように動的に定義できます
for n in range(1, 13):
exec('month_{} = {}'.format(n, value or expression))
一般に、この文は変数を正しく定義できますが、後方から入力されたexpressionがDataFrameGroupクラス変数を返すと、構文エラーが発生することがあります.
File "", line 1 month_12 = ^ SyntaxError: invalid syntax
原因は不明...検索してみると、上記の問題を解決する別の定義方法があることがわかりました.
for n in range(1, 13):
exec('month_{} = temp'.format(n), {'temp': expression})
この方法には2つの問題があります.
1、formatで置換する部分は変数名の最後に、例month_{},こそ実行に成功するが,{}monthは実行できません.原因は調べなければなりません.皆さんに教えてください.
File "", line 1 12_month = temp ^ SyntaxError: invalid token
2、この方法で定義された変数は、execでのみ有効であり、exec文の外では無効である.これはpythonがexecの複雑な命令を局所変数としているためか、以下の文で検証できる
for n in range(1, 13):
exec('month_{} = temp
print(locals()==globals())'.format(n), {'temp': expression})
ここでlocals()とglobals()はpythonの内部メソッドであり、辞書ベースのローカル変数とグローバル変数へのアクセス方法を提供します.
Trueを返すと、現在の環境がグローバルレベルであることを示し、execの文はexecの外で有効になります.
Falseを返すと、当期環境がローカルレベルにあることを示し、定義された変数はローカル変数とみなされるため、execでは外注できず、文にglobals()を入力してグローバルに有効にすることができます.
for n in range(1, 13):
exec('month_{} = temp'.format(n), {'temp': expression}, globals())
exec
方式が混乱しやすく、変数を動的に定義するもう一つの方法は、前述のglobals()とlocals()の方法であるネーミングスペースを使用した変数の動的定義
まずlocals()のコピーを作成します
varDict = locals()
上記の変数については、このように定義できます.
for n in range(1, 13):
varDict['month_'+str(n)] = value or expression
この方法で作成した変数は、最初の方法で文法エラーと変数の役割ドメインのエラーは発生しません.推奨します.