我是Python的新手,并且一直在寻找一种方法来调用一个函数,该函数的名称由字符串和变量的组合形成,当用户选择其中一个选项时,该函数会动态填充.
例:
我用一个菜单启动程序,为用户提供某些选项(选择1,2,3或4)
如果用户选择1,变量xyz将填充一个元组或列表内的字符串.
将此字符串分配给变量,我调用另一个函数,它给了我另一个选项.
如果我得到选项1,我的代码会将xyz varible附加到预定义的字符串中,该字符串将形成一个函数名称(将在下一个调用的名称).
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()
Run Code Online (Sandbox Code Playgroud)
它在代码中工作正常.我不认为这对用户添加不同输入的情况可能是一种责任.由于在列表或元组中使用已定义的字符串来分配变量.
我希望我已经说清楚了.
只是为了更清楚:
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()
Run Code Online (Sandbox Code Playgroud)
为此,我将使用一个dict将字符串名称映射到函数.
def test():
print "yay"
funcs = { "test": test }
funcs["test"]()
Run Code Online (Sandbox Code Playgroud)
这提供了一种更好的方法,您可以使用in运算符测试是否要非常轻松地执行该函数.
回答:你的例子很好用,eval或者exec我会说不.如果您认为这exec是正确的答案,请查看您的解决方案,看看是否有更可维护,简单或明确的方法来实现您的目标.在这种情况下,基于某些用户输入将用户输入映射到要调用的函数.
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |