Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Python

Pythonで動的に変数を定義する方法

投稿日:2022年12月2日 更新日:

<目次>

Pythonで動的に変数を定義する方法
 想定利用シーン
 (構文1)forループから
 (構文2)ディクショナリー形式から
 サンプルプログラム1
 サンプルプログラム2

Pythonで動的に変数を定義する方法

想定利用シーン

Pythonで例えば「決められたサイズの数だけ、forループで動的に変数を定義したい」という場面があるかもしれません。本記事ではその方法をご紹介します。

(例)想定利用シーン
・ディープラーニングで層の数だけ、モデル変数を定義したい場合など
・指定した規模の数だけ、動的に変数を定義したい場合など

目次にもどる

(構文1)forループから

globals()関数にて動的に「変数、値」のペアを生成し、ディクショナリー型で返却します。
下記の例では「var_1~var_9」までを動的に作っています。

# forループで変数を「動的に」生成
for i in range(1, 10):
    globals()[f"var_{i}"] = i

(適する場面)
もし、事前に変数の名前のディクショナリーが無く、単に「指定した規模で動的に作る」といった仕様の場合はこちらの(構文1)が適切かもしれません。

目次にもどる

(構文2)ディクショナリー形式から

forでディクショナリーの「key、value」のペアをループし、execで動的に「変数、値」のセットに変換しています。
下記の例では「a1、a3、c2」を動的に作っています。

# JSONデータ
update = {"a1": 1000, "a3": 3500, "c2": 5500}
# execで各[key-value]を[変数-値]に変換
for key, val in update.items():
    exec(f"{key} = {val}")

(適する場面)
あらかじめ、作成内容がディクショナリーで連携可能な場合は、こちらの(構文2)の方がスムーズかもしれません。

目次にもどる

サンプルプログラム1

上記の(構文1)を使ったサンプルプログラムです。

def main():

    # 標準では、隠し変数が定義されている
    print({k: v for k, v in globals().items() if not k.startswith("__")})

    # forループで変数を「動的に」生成
    for i in range(1, 10):
        globals()[f"var_{i}"] = i

    # 変数をコンソール表示
    print()
    print({k: v for k, v in globals().items() if not k.startswith("__")})

if __name__ == "__main__":
    main()

【サンプルプログラム1】の出力結果:

{'main': <function main at 0x000002CAD5047040>}

{'main': <function main at 0x000002CAD5047040>, 'var_1': 1, 'var_2': 2, 'var_3': 3, 'var_4': 4, 'var_5': 5, 'var_6': 6, 'var_7': 7, 'var_8': 8, 'var_9': 9}

(図131)

目次にもどる

globals()関数の解説

globals()はPythonにおけるグローバルシンボルテーブルの情報(≒グローバルスコープでの変数名、変数値など)を保持しているテーブルにアクセスするための関数です。
グローバルシンボルテーブルの内容をディクショナリー形式で返却してくれます。

例えば、ファイル名などもグローバルシンボルテーブルに含まれます。

x = globals()
print(x["__file__"])

目次にもどる

サンプルプログラム2

上記の(構文2)を使ったサンプルプログラムです。

if __name__ == "__main__":

    # JSONデータ
    update = {"a1": 1000, "a3": 3500, "c2": 5500}
    # execで各[key-value]を[変数-値]に変換
    for key, val in update.items():
        exec(f"{key} = {val}")

    print(a1, a3, c2)

【サンプルプログラム2】の出力結果:

1000 3500 5500

目次にもどる

(図132)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Python
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Python開発環境にPandasライブラリをインストールする手順

(0)目次&概説 (1) Pandasの導入  (1-1) Pandasとは? (2) オフラインインストール  (2-1) インストール資源の入手  (2-2) インストール時の諸注意  (2-3) …

PythonでAPI呼び出す時のヘッダー、ボディの指定方法について

  <目次> (1) PythonでAPI呼び出す時のヘッダー、ボディの指定方法について  (1-1) 記事の概要  (1-2) ①「ヘッダー」の指定方法  (1-3) ②「ボディ」の指定方 …

matmulとdotの違いについて(Pythonのnumpy・tensorflow)

  <目次> matmulとdotの違いについて(Pythonのnumpy・tensorflow)  (1-1) 両者の違い  (1-2) 両者の違い(実機確認) matmulとdotの違い …

PythonのdatapackageとSQLAlchemy、SQLiteを使ってcsvデータをSELECTする

(0)目次&概説 (1) 今回の目的  (1-1) 目的  (1-2) 前提条件 (2) 実施手順  (2-0) 事前作業  (2-1) データ(csv)のロード  (2-2) エンジンの作成  (2 …

Pythonでcsvを読み込んでデータベース化する方法~pandasのto_sqlを用いたテーブルへのINSERT~

<目次> (1) Pythonでcsvを読み込んでデータベース化する方法  (1-1) 構文(to_sql)  (1-2) 構文(to_sql)の引数  (1-3) サンプルプログラム (1) Pyt …

  • English (United States)
  • 日本語
Top