繁体   English   中英

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

[英]Python - passing a function as an argument to another function

我有两个文件;

  1. 第一个文件myProgram.py是具有许多功能的python文件
    其中包含的函数之一是myFunction该函数将与

     import myProgram myProgram.thisFunction() myProgram.thatFunction() 
  2. 第二个文件包含一个菜单系统,其中包含对myProgram.py的函数的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路线是走的路?)

您可以创建一个字典,其中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

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

def func1(a):
    print a

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

file2_function(func1,4)
#4

@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"

或者,您有getattr 请参见以下代码段:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM