在这段代码中,我有一个字典// 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.
同时执行a
和b
?
答案 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')