-2

関数を含むファイルがあります:

modules.py:

def a(str):
    return str + ' A'

def b(str):
    return str + ' B'

これらの機能を循環的に実行したい。何かのようなもの:

main.py:

import modules

modules_list = [modules.a, modules.b]
hello = 'Hello'

for m in modules_list:
    print m(hello)

結果は次のようになります。

>>> Hello A
>>> Hello B

このコードは機能します。の関数が多すぎるため、デコレータを使用したくありませんmodules.py。最善の方法は何ですか?ありがとう。

4

3 に答える 3

4

このようなもの:

import modules
hello = 'Hello'
for m in dir(modules):
    obj = getattr(modules,m)
    if hasattr( obj, "__call__" ): #or use `if callable(obj):`
        print obj(hello)

出力:

Hello A
Hello B

ちなみに、Python の組み込み関数の名前として既に使用されているためstr、変数名として使用しないでください。str

于 2013-05-03T05:49:28.470 に答える
2
import modules
hello = 'Hello'
for func in (x for x in modules.__dict__.values() if callable(x)):
    print func(hello)

inspect名前でソートするモジュールを使用することもできます

import inspect
import modules
for name, func in inspect.getmembers(modules, callable):
    print func(hello)
于 2013-05-03T06:16:27.400 に答える
0

これはあなたが探しているものかもしれません。

>>> for functions in dir(modules):
        if not functions.startswith("__"):
                eval("modules."+functions+"(\"Hello\")")

'Hello A'
'Hello B'

これは単なる大まかな概算です。確かに、私がプログラムに入れるコードではありません。

于 2013-05-03T05:51:14.043 に答える