1

我有两个文件;

  1. 第一个文件myProgram.py是一个带有许多函数的 python 文件,
    其中包含的一个函数是myFunction 这个函数将被调用

    import myProgram
    myProgram.thisFunction()
    myProgram.thatFunction()
    
  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 回答