我有两个文件;
第一个文件myProgram.py
是一个包含许多函数的python文件
其中一个函数是myFunction
使用
import myProgram
myProgram.thisFunction()
myProgram.thatFunction()
第二个文件包含一个菜单系统,调用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路线是否可行?)
答案 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)
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)