代码之家  ›  专栏  ›  技术社区  ›  André

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

  •  1
  • André  · 技术社区  · 2 年前

    我对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条件,结果很奇怪:

        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分支获取值吗?

    1 回复  |  直到 2 年前
        1
  •  1
  •   GregoirePelegrin    2 年前

    这并不意外。你准备好了吗 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,他在我编辑的同时发表了评论。