我有一个与此类似的功能:
def some_function(self, case, index):
with threading.Lock:
return{
'case1':function1(index),
'case2':function2(index)
}[case]
在其他地方,这个函数被称为:
for i in range(4)
self.module.some_function('case1', i)
哪个应该为指定范围内的索引迭代function1。相反,函数1和函数2都针对索引进行迭代。上面的实现有问题吗?当只给出一个键时,什么可能导致函数1和函数2被调用?
答案 0 :(得分:0)
实际上,首先评估这个dict文字表达式:
'\b'
然后才从中选择您指定的键,但此时两个函数已经执行。
因此,您应该采用不同的方式:首先必须使用{
'case1':function1(index),
'case2':function2(index)
}
变量选择正确的函数,并且只有在选择之后才能通过将参数传递给它来执行该函数。
有几个解决方案,但这里有一个:
case
或者使用字典文字:
return [function1, function2][case == 'case2'](index)
或使用内联return {
'case1': function1,
'case2': function2
}[case](index)
:
if
或者避免重复return function1(index) if case == 'case1' else function2(index)
:
(index)
或者您可以使用普通return (function1 if case == 'case1' else function2)(index)
:
if