如何使用字典执行多个功能?

时间:2018-12-18 17:34:46

标签: python python-3.x dictionary

在这段代码中,我有一个字典// if you want to set 0 as default value $table->decimal('starting_balance', 8, 2)->default(0); // if you want to set NULL as default value $table->decimal('starting_balance', 8, 2)->nullable();

switcher

如果我使用def a(): print("A") def b(): print('B') def switch(mode): switcher = { 'a': a, 'b': b, 'ab': (a, b) } switcher[mode]() switch('a') ,则会得到输出:

  

A

到目前为止,使用switch('a')返回错误:

switch('ab')

如何使用TypeError: 'tuple' object is not callable. 同时执行ab

3 个答案:

答案 0 :(得分:4)

通过为可迭代对象引入for循环

def a():
    print("A")

def b():
    print('B')


def switch(mode):
    switcher = {
        'a': a,
        'b': b,
        'ab': (a, b)
    }
    for i in mode:
        switcher[i]()

switch('ab')

输出

A
B

答案 1 :(得分:1)

这里的错误是由您的字典存储两种不同类型的事物引起的:与键'a''b'关联的值“只是”一个函数,而'ab'的值是功能的元组。

基于惯用的Python代码asking forgiveness, not permission的原理,我建议尝试将字典中的元素称为“仅”一个函数,如果失败,则尝试迭代元组中的每个函数。

def switch(mode):
    switcher = {
        'a': a,
        'b': b,
        'ab': (a, b)
    }
    try:
        switcher[mode]()
    except TypeError:  # must be a tuple of functions
        for fn in switcher[mode]:
            fn()

答案 2 :(得分:1)

您可以分别处理第三种情况(这是一个函数的元组):

def a():
    print("A")
def b():
    print('B')
def switch(mode):
    switcher = { 'a': a, 'b': b, 'ab': (a, b) }
    if type(switcher[mode]) is tuple:
         for func in switcher[mode]:
            func()
    else:
         switcher[mode]()

switch('ab')