Python で文字列を変数名に変換する

  1. Python で globals()locals() を使用して文字列を変数名に変換する
  2. Python で exec() を使用して文字列を変数名に変換する

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))

出力:

globals()関数を使用して文字列を変数名に変換します

ここで最初に行うことは、input() 関数を使用してユーザーから入力を受け取り、その中に文字列 Enter a string for a variable name:を渡すことです。次に、ユーザーが入力する値が何であれ、その値は変数 user_input 内に格納されます。ここでは、ユーザーが文字列値として apple を入力し、それが user_input 内に格納されることを期待しています。ユーザーが apple 以外の値を入力すると、NameError: name 'variable' is not defined としてプログラムはエラーを起こします。これは、apple の値も出力し、コードの後半でそのタイプを確認しているためです。

ユーザーが正しい値を入力した場合、globals() を使用してグローバルディクショナリを変更し、グローバルディクショナリを変更して、変数 apple に任意の値を割り当てることができます。ここでは、変数 apple50 を割り当てました。

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()関数を使用して文字列を変数名に変換します

このコードも 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 変数の代わりに、その変数内の値が置き換えられます。整数 100Elon に割り当てられます。elon は変数名になり、それを印刷すると、出力として 100 が得られます。

関連記事 - Python String

  • Python で文字列をループする
  • 関連記事 - Python Variable

  • Python での文字列内の文字の出現回数をカウントする