Pythonic方法根据变量调用方法[解决方案:字典]

时间:2017-10-09 13:53:51

标签: python variables dictionary methods

我已经有了工作,但在我看来,对于长篇剧本的一部分来说,这不是一个很好的解决方案。

我的脚本使用了几种类似的方法,这些方法相差很大。但是,我想要根据给定的变量调用其中一种方法。

这些方法的名称是这样构建的:

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()'

请注意上面的代码只是我希望做的图片,这不是一个有效的例子!

我希望我能清楚地说出我的问题,提前谢谢!

4 个答案:

答案 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()。