Python では、文字列に基づいて関数を呼び出すことができます:
1. getattr を使用して文字列から関数を呼び出します
複数のプロセスで文字列が渡される可能性があるので、それを呼び出すにはどうすればよいですか?主に getattr 関数を使用します。この関数は、以下に示すように、文字列を使用してその文字列に対応する関数のオブジェクトを取得し、実行できます:
モジュールには 2 つの関数があります:
[root@python 530]# cat attr.py #!/usr/bin/env python def kel(): print 'this is a kel function' def smile(): print 'this is a smile function' if __name__ == '__main__': kel() smile()
上記の attr モジュールでは、2 つの関数が定義されています。1 つの関数は kel で、もう 1 つの関数は smile です。では、文字列 kel と smile に基づいて関数を実行するにはどうすればよいでしょうか。次のように getattr 関数を使用します。
>>> import attr >>> k = getattr(attr,'kel') >>> k() this is a kel function >>> s = getattr(attr,'smile') >>> s() this is a smile function >>> e = getattr(attr,'errors') Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'module' object has no attribute 'errors'
上記のモジュールの定義は変更されませんが、以下に示すように、呼び出し時に辞書を定義し、辞書の値に基づいて関数を実行できます。
>>> import attr >>> d = {'kel':attr.kel,'smile':attr.smile} >>> d['kel']() this is a kel function >>> d['smile']() this is a smile function