为什么在使用一行 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,他在我编辑的同时发表了评论。
我是 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,他在我编辑的同时发表了评论。