为什么在使用一行 if-else 语句时解包不能正常工作

Why unpacking doesn't work correctly when using an one line if-else statement

我是 Python 的新手,在测试我的代码时遇到了一个奇怪的行为。我正在搜索一棵树并收集信息,具体取决于我正在搜索树的方向。

    def my_func():
        return (10,20)

    direction = 'forward'

    if direction == 'forward':
        a, b = my_func()  
    else: 
        a, b = 30,40

    print (f'Direction is: {direction}\nThe value of a is: {a} \nThe value of b is: {b}')

这给了我预期的结果:

    Direction is: forward    Direction is: backward
    The value of a is: 10    The value of a is: 30 
    The value of b is: 20    The value of b is: 40

但是如果我使用单行 if-else-condition,结果会很奇怪:

    a, b = my_func() if direction == 'forward' else 30,40

这给了我以下结果:

    Direction is: forward          Direction is: backward    
    The value of a is: (10, 20)    The value of a is: 30      
    The value of b is: 40          The value of b is: 40

任何人都可以向我解释为什么解包在这种情况下不起作用(正向搜索)以及为什么 b 从 else 分支获取值?

这并不意外。您将 a 设置为 my_func() if direction == 'forward' else 30,将 b 设置为 40。这是因为解包是在之前 三元运算符完成的。因此,a 将采用一行 if else 条件的结果,而 b 将采用值 40.

如果要修复它,请执行 a, b = my_func() if direction == 'forward' else (30, 40)

编辑:归功于@Jake,他在我编辑的同时发表了评论。