从变量动态调用函数 - Python

时间:2017-09-16 09:19:04

标签: python-3.x function

好的,我有两个文件filename1.pyfilename2.py,它们都有一个同名funB的函数。第三个文件process.py具有从任一文件调用函数的函数。我似乎在努力调用正确的功能。

process.py

from directoryA.filename1 import funB
from directoryA.filename2 import funB

def funA:

    #do stuff to determine which filename and save it in variable named 'd'
    d = 'filename2'
    # here i want to call funB with *args based on what 'd' is 

所以我尝试eval()就像这样:

 call_right_funB = eval(d.funB(*args))    

但似乎没有用。

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

问题是,你不能将eval()与字符串和类似的方法结合使用。你写的是:

call_right_funB = eval('filename'.funB(*args))

你能做的是:

call_right_funB = eval(d + '.funB(*args)')

但这不是非常pythonic的方法。 我建议创建一个字典开关。即使您必须导入整个模块:

import directoryA.filename1
import directoryA.filename2

dic_switch = {1: directoryA.filename1, 2: directoryA.filename2}
switch_variable = 1
call_right_funB = dic_switch[switch_variable].funB(*args)

希望它有所帮助。