Python - 将函数作为参数传递给另一个函数

时间:2013-11-07 11:31:44

标签: python parameters arguments parameter-passing argument-passing

我有两个文件;

  1. 第一个文件myProgram.py是一个包含许多函数的python文件 其中一个函数是myFunction 使用

    调用此函数
    import myProgram
    myProgram.thisFunction()
    myProgram.thatFunction()
    
  2. 第二个文件包含一个菜单系统,调用myProgram.py中的函数

  3. 我想基于传递给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 个答案:

答案 0 :(得分:3)

您可以创建一个字典,其中key是函数的名称,value是函数本身。简短的例子:

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

答案 1 :(得分:3)

函数*args中的file2_function表示要传递给它调用的函数的参数:

def func1(a):
    print a

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

file2_function(func1,4)
#4

答案 2 :(得分: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"

答案 3 :(得分:0)

或者你有getattr。请参阅以下代码段:

>>> import sys
>>> getattr(sys,'exc_info')
<built-in function exc_info>
>>> getattr(sys,'exc_info')()
(None, None, None)