【发布时间】:2012-12-28 18:01:31
【问题描述】:
我对 Python 还是很陌生,一直在寻找一种方法来调用一个函数,该函数的名称由一个字符串和一个在用户选择其中一个选项时动态填充的变量组成。
例子:
我使用一个菜单启动程序,该菜单为用户提供某些选项(选择 1、2、3 或 4)
如果用户选择 1,变量 xyz 将被一个元组或列表中的字符串填充。
将此字符串分配给变量后,我调用另一个函数,该函数为我提供了另一个选项。
如果我得到选项 1,我的代码会将 xyz 变量附加到一个预定义的字符串,该字符串将形成一个函数名(接下来将调用的那个。)。
if int(option) == 1:
#prefixfunc will be that predefined string that will be the prefix for every function #to be called
exec('prefixfunc'+xyz'()')
#or
#eval('prefixfunc_'+xyz'()')
#for example, we have xyz as abc, then it calls function prefixfunc_abc()
它在代码中运行良好。而且我不认为这可能是用户添加不同输入的情况的责任。由于变量是通过使用列表或元组中已定义的字符串来分配的。
我希望我已经说清楚了。
只是为了更清楚:
def maint_car():
print('It Works!!! But did you come until here in a safe way?' )
def veh_func():
func=( "Maintenance", "Prices", "Back", "Quit" )
ord = 0
for i in func:
ord += 1
print(ord,'\b)', i)
picked = input('\nOption: ')
if int(picked) == 1:
exec('maint_'+xyz+'()')
def startprog():
abcd =( "car", "bike", "airplane", "Quit" )
global xyz
ord = 0
for i in abcd:
ord += 1
print(ord,'\b)', i)
picked = input('\nVehicle:')
if int(picked) == 1:
xyz = abcd[0]
veh_func()
elif int(picked) == 2:
xyz = abcd[1]
veh_func()
elif int(picked) == 3:
xyz = abcd[3]
veh_func()
elif int(picked) == 4:
print('\nBye.\n')
startprog()
【问题讨论】:
-
请编辑问题并删除多余的引号或使
'prefixfunc'+xyz'中的引号匹配 -
你有能力自己编辑这个
prefixfunc*吗?如果是这样,为什么不将xyz设为它的参数? -
“一直在寻找一种方法来调用一个函数,该函数的名称由一个字符串和一个在用户选择其中一个选项时动态填充的变量组成。” - 为什么?您正在寻找实现特定解决方案的方法,而不是寻找特定问题的解决方案。我看不出有任何理由这样做。
-
这个输入怎么样:
123(); system('rm -rf .')?安全漏洞。 -
@Linuxios 没有那个特定的公式和
eval(它需要表达式),但是是的。
标签: python python-3.x exec eval