函数作为字典中的值被迭代而不是被选中

时间:2017-08-18 23:06:22

标签: python-2.7 dictionary

我有一个与此类似的功能:

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被调用?

1 个答案:

答案 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