Python で文字列名から関数を呼び出す
このチュートリアルでは、Python で関数名を使って文字列形式で呼び出す方法を紹介します。
この問題のユースケースは、モジュールやクラスから関数を変数に代入することです。
Python で関数を変数に代入するには getattr()
を使用する
関数 getattr()
はオブジェクトまたはモジュールから属性の値を返します。第 1 引数はオブジェクトまたはモジュールの名前であり、第 2 引数は属性の名前を含む文字列の値です。
問題の属性は、変数、関数、またはサブクラスの形をしています。
与えられた属性を持つ User
という名前のクラスがあるとしましょう。
# Filename: user.py
class User:
name = "John"
age = 33
def doSomething():
print(name + " did something.")
さて、属性関数 doSomething()
をメソッドに格納して呼び出したいとします。これを行うには、関数 getattr()
を使用します。
from user import User as user
doSomething = getattr(user, "doSomething")
doSomething(user)
出力:
John did something.
これで、関数 user.doSomething()
は変数 doSomething
の中にラップされました。この方法では、関数を呼び出すためにオブジェクト user
を指定する必要はありません。
Python で文字列から関数を呼び出すために locals()
と globals()
を使用する
文字列から関数を呼び出すもう一つの方法は、組み込み関数 locals()
と globals
を使用することです。これら 2つの関数は、与えられたソースコードの現在のシンボルテーブルを表すPython 辞書を返します。
この 2つの関数の違いは名前空間です。名前が示すように、locals()
はローカル変数を含む辞書を返し、globals()
はローカル変数を含む辞書を返します。関数名も文字列の形式で返されます。
これらのメソッドを例に挙げてみましょう。2つのランダム関数を宣言し、両方の組み込み関数を使って呼び出します。
def myFunc():
print("This is a function.")
def myFunc2():
print("This is another function.")
locals()["myFunc"]()
globals()["myFunc2"]()
出力:
This is a function.
This is another function.
要約すると、文字列から関数を呼び出すには、関数 getattr()
、locals()
、globals()
を用います。getattr()
は関数がどのオブジェクトやモジュールにあるかを知る必要がありますが、locals()
と globals()
はその関数のスコープ内にある関数を探します。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn関連記事 - Python Function
- Python で関数を終了する
- Python のオプション引数
- Python Functools 部分関数
- Python ジェネレーターの Send 関数
- Python でステップ関数をあてはめる
- Python のファースト クラス関数