我已经有了工作,但在我看来,对于长篇剧本的一部分来说,这不是一个很好的解决方案。
我的脚本使用了几种类似的方法,这些方法相差很大。但是,我想要根据给定的变量调用其中一种方法。
这些方法的名称是这样构建的:
def read_A():
#doing sth
def read_B():
#doing sth else
def read_C():
等
现在我想以pythonic的方式调用这些方法,当字母( A,B,C ,...)作为变量给出时。
非pythonic 解决方案将是:
if var == "A":
read_A()
if var == "B":
read_B() .....
我希望找到一个更加pythonic的解决方案,让我可以像这样简单地调用这些方法:
var = "A"
read_var() #This would call the method 'read_A()'
请注意上面的代码只是我希望做的图片,这不是一个有效的例子!
我希望我能清楚地说出我的问题,提前谢谢!
答案 0 :(得分:2)
我没有看到只使用
的问题if var == 'A':
read_a()
但是如果你想让它更加'pythonic',你可以使用字典将变量映射到方法,并根据字典中存储的结果执行它:
def read_a():
print('Running method read_a')
def read_b():
print('Running method read_b')
switch = {'A': read_a, 'B': read_b}
case = 'A'
switch.get(case)()
>> 'Running method read_a'
case = 'B'
switch.get(case)()
>> 'Running method read_b'
答案 1 :(得分:1)
将函数粘贴到字典中,并使用字典分派到所选字典:
read = {'A': read_a, 'B': read_b, 'C': read_c}
choice = 'A'
read[choice]()
在最后一行,您在字典中查找与您的选择相匹配的函数,然后立即调用它。
答案 2 :(得分:1)
如果您有许多名为read_a,read_b ...等的函数,而不是编写大型字典,则可以这样做。
def read_a():
print('Running method read_a')
def read_b():
print('Running method read_b')
def read_c():
print("running method read_c")
def read_d():
print("running method read_d")
............
............
def read_z():
print("running method read_z")
def _read_var(var):
method = "read_{}".format(var.lower())
try:
eval(method)()
except NameError:
raise NotImplementedError
var = "A"
_read_var(var)# will invoke read_a method
答案 3 :(得分:1)
你可以使用下一个结构:
def execute_func(x):
return {
'0':read_A(),
'1':read_B()
}[x]
改为设置变量' 0'和' 1'或更多,并将你的参数传递给execute_func()。