Python で文字列を変数名に変換する
Python では、文字列の値を変数の名前に変換する様々な方法があります。この記事では、これを実現するためのさまざまな方法について説明します。
Python プログラムの実行中に変数名を動的に定義するために、これを実行したい場合があります。以下に示す方法を使用して文字列を変数名に変換することは、いくつかの問題を引き起こす可能性があるため、本番環境に対応したソフトウェアの開発中にはお勧めしません。はい、これを達成することは可能ですが、これを行う際には注意してください。
Python で globals()
と locals()
を使用して文字列を変数名に変換する
globals()
Python の globals()
関数は、現在のグローバルシンボルテーブルのディクショナリを返します。グローバルシンボルテーブルには、プログラムのグローバルスコープに関連するすべての情報が格納されます。これらの情報には、globals()
関数を使用してアクセスできます。
user_input = input("Enter string for variable name: \n")
globals()[user_input] = 50
print(apple)
print(type(apple))
出力:
ここで最初に行うことは、input()
関数を使用してユーザーから入力を受け取り、その中に文字列 Enter a string for a variable name:
を渡すことです。次に、ユーザーが入力する値が何であれ、その値は変数 user_input
内に格納されます。ここでは、ユーザーが文字列値として apple
を入力し、それが user_input
内に格納されることを期待しています。ユーザーが apple
以外の値を入力すると、NameError: name 'variable' is not defined
としてプログラムはエラーを起こします。これは、apple
の値も出力し、コードの後半でそのタイプを確認しているためです。
ユーザーが正しい値を入力した場合、globals()
を使用してグローバルディクショナリを変更し、グローバルディクショナリを変更して、変数 apple
に任意の値を割り当てることができます。ここでは、変数 apple
に 50
を割り当てました。
locals()
Python の locals()
関数は、現在のローカルシンボルテーブルのディクショナリを返します。ローカルシンボルテーブルには、locals()
関数を使用してアクセスできます。locals()
関数は、globals()
関数とほぼ同じように機能します。唯一の違いは、locals()
がローカルシンボルテーブルにアクセスでき、globals()
がグローバルシンボルテーブルにアクセスしてディクショナリを返すことです。
user_input = input("Enter string for variable name: \n")
locals()[user_input] = 50
print(apple)
print(type(apple))
出力:
このコードも globals()
のコードと同じように機能します。唯一の違いは、ここで関数 locals()
を使用したことです。
Python で exec()
を使用して文字列を変数名に変換する
これを行う別の方法は、Python で exec()
関数を使用することです。exec()
関数は、Python プログラムを動的に実行するために使用されます。文字列値 Elon
を格納する変数 name
があります。
name = 'Elon'
exec("%s = %d" % (name,100))
print(Elon)
出力:
100
exec()
関数内には、文字列値と 10 進値のプレースホルダーとしてそれぞれ使用される%s
と%d
があります。これは、代入演算子 =
を使用して文字列に整数値を割り当てることを意味します。%s
と%d
の両方が引用符 =
で囲まれています。次に、括弧があり、その中に 2つのものがあります。1つ目は作成した変数、つまり値 Elon
を含む name
で、2つ目は整数 100
です。
ここでは、name
変数の代わりに、その変数内の値が置き換えられます。整数 100
が Elon
に割り当てられます。Elon
は変数名になり、それを出力すると、出力として 100
が得られます。