多重 Return 语法如何工作?
How Does the Multiple Return Syntax Work?
我有一个问题,我想 return 基于结果的值。但要做到这一点,我需要有多个 return 语句,如下所示:
if w1 > w2: return 'Computer Wins!!'
elif w1 == w2: return 'Tie War!!'
else:
return 'I Win!!'
但我看到有人这样写语法:
return ('I Win!!', 'Computer Wins!!', 'Tie War!!')[(w1>w2)-(w1==w2)]
所以,我不确定第二段代码是如何工作的。你能解释一下吗?谢谢!
此表达式使用所有三个 return 值构建一个 tuple
,并通过对 bool
执行减法来访问正确的 return 值。它利用了 Python 中的算术运算将 True
解释为 1 并将 False
解释为 0 的事实。
对于计算机win,w1>w2
为真,w1==w2
为假,所以(w1>w2) - (w1==w2)
=1-0=1,元组位置1的元素为returned.
对于平局,操作的结果是-1,遵循相同的逻辑,所以元组的最后一个元素是returned。以同样的方式,对于玩家获胜,操作的计算结果为 0,因此元组的第一个元素是 returned.
这被认为是不好的做法,因为它比使用 if/elif/else 语句更难阅读,正如您必须问这个问题才能理解逻辑所证实的那样!
第二种方法很聪明,但为了可读性我不推荐它:
让我们分解代码
return ('I Win!!', 'Computer Wins!!', 'Tie War!!')[(w1>w2)-(w1==w2)]
注意:在Python中,True
计算为1
,False
计算为0
。
案例
如果 (w1 > w2)
是 True(1) 那么 (w1 == w2)
必然是 False(0)
-> [(w1 > w2) - (w1 == w2)]
-> [1 - 0] 等于 [1]
-> 因此 ('I Win!!', 'Computer Wins!!', 'Tie War!!')[1]
-> 结果是 'Computer Win!!'
如果 (w1 > w2)
为 False(0) 那么 (w1 == w2)
必然为 False(0)
-> [(w1 > w2) - (w1 == w2)]
-> [0 - 0] 等于 [0]
-> 因此 ('I Win!!', 'Computer Wins!!', 'Tie War!!')[0]
-> 结果是 'I win!'
如果 (w1 > w2)
为假 (0) 且 (w1 == w2)
为真 (1) 则
-> [(w1 > w2) - (w1 == w2)]
-> [0 - 1] 等于 [-1]
所以 ('I Win!!', 'Computer Wins!!', 'Tie War!!')[-1]
给出最后一项,即 'Tie War!!'
我有一个问题,我想 return 基于结果的值。但要做到这一点,我需要有多个 return 语句,如下所示:
if w1 > w2: return 'Computer Wins!!'
elif w1 == w2: return 'Tie War!!'
else:
return 'I Win!!'
但我看到有人这样写语法:
return ('I Win!!', 'Computer Wins!!', 'Tie War!!')[(w1>w2)-(w1==w2)]
所以,我不确定第二段代码是如何工作的。你能解释一下吗?谢谢!
此表达式使用所有三个 return 值构建一个 tuple
,并通过对 bool
执行减法来访问正确的 return 值。它利用了 Python 中的算术运算将 True
解释为 1 并将 False
解释为 0 的事实。
对于计算机win,w1>w2
为真,w1==w2
为假,所以(w1>w2) - (w1==w2)
=1-0=1,元组位置1的元素为returned.
对于平局,操作的结果是-1,遵循相同的逻辑,所以元组的最后一个元素是returned。以同样的方式,对于玩家获胜,操作的计算结果为 0,因此元组的第一个元素是 returned.
这被认为是不好的做法,因为它比使用 if/elif/else 语句更难阅读,正如您必须问这个问题才能理解逻辑所证实的那样!
第二种方法很聪明,但为了可读性我不推荐它:
让我们分解代码
return ('I Win!!', 'Computer Wins!!', 'Tie War!!')[(w1>w2)-(w1==w2)]
注意:在Python中,True
计算为1
,False
计算为0
。
案例
如果 (w1 > w2)
是 True(1) 那么 (w1 == w2)
必然是 False(0)
-> [(w1 > w2) - (w1 == w2)]
-> [1 - 0] 等于 [1]
-> 因此 ('I Win!!', 'Computer Wins!!', 'Tie War!!')[1]
-> 结果是 'Computer Win!!'
如果 (w1 > w2)
为 False(0) 那么 (w1 == w2)
必然为 False(0)
-> [(w1 > w2) - (w1 == w2)]
-> [0 - 0] 等于 [0]
-> 因此 ('I Win!!', 'Computer Wins!!', 'Tie War!!')[0]
-> 结果是 'I win!'
如果 (w1 > w2)
为假 (0) 且 (w1 == w2)
为真 (1) 则
-> [(w1 > w2) - (w1 == w2)]
-> [0 - 1] 等于 [-1]
所以 ('I Win!!', 'Computer Wins!!', 'Tie War!!')[-1]
给出最后一项,即 'Tie War!!'