1

2 つのファイルがあります。

  1. 最初のファイル はmyProgram.py、多数の関数を含む python ファイルです。
    内部に含まれる関数の 1 つは、myFunction この関数が呼び出される

    import myProgram
    myProgram.thisFunction()
    myProgram.thatFunction()
    
  2. 2 番目のファイルには、関数への呼び出しを含むメニュー システムが含まれています。myProgram.py

file2 の関数に渡された引数に基づいて特定の関数を呼び出したい

def file2_function(function):
    myProgram.function

file2_function(thisFunction(x,y,z))

これは基本的に myProgram.thisfunction(x,y,z) を作成して実行します。

一連の if/elif ステートメントを使用してこれを行うことができると思います。たとえば、次のようにします。

def file2_function(function):
    if function == 1:
        myProgram.thisFunction
    elif function == 2: 
        myProgram.thatFunction

私はすでにメニューシステムに多くの if/elif/else ステートメントを使用しているため、面倒になる可能性があります。

より良い方法はありますか (または、if/elif ルートが適していますか?)

4

4 に答える 4

4

*args関数内のはfile2_function、呼び出し元の関数に渡される引数を意味します。

def func1(a):
    print a

def file2_function(function,*args):
    function(*args)

file2_function(func1,4)
#4
于 2013-11-07T12:18:22.810 に答える
3

キーが関数の名前で、値が関数自体である辞書を作成できます。短い例:

functions = { 'add' : lambda x,y : x + y, 'mult': lambda x,y : x * y, 'div' : lambda x,y : x / y, 'sub' : lambda x,y : x - y  }
functions['add'](1,2) # returns 3
于 2013-11-07T11:34:21.463 に答える
1

@aga さんがいいヒントをくれました。私がcliアプリケーションを書いているとき、私は通常次のようにします:

def func1():
    pass

def func2():
    pass

def func3():
    pass

def func_caller(name):
    func_dict = {
        'func1': func1,
        'func2': func2,
        'func3': func3
        }
    try:
        func_dict[name]()
    except KeyError:
        print "no such func"
于 2013-11-07T11:45:48.393 に答える
0

あるいは、あなたが持っていgetattrます。次のスニペットを参照してください。

>>> import sys
>>> getattr(sys,'exc_info')
<built-in function exc_info>
>>> getattr(sys,'exc_info')()
(None, None, None)
于 2013-11-07T11:43:10.140 に答える