多重返回语法是如何工作的?

2024-05-13 09:03:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我想返回一个基于结果的值。但要做到这一点,我需要有多个返回语句,如下所示:

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)]

因此,我不确定第二段代码是如何工作的。你能解释一下吗?谢谢


Tags: 代码returnif语句winelsecomputerw1
2条回答

第二种方法很聪明,但出于可读性考虑,我不推荐它:

让我们把代码分解一下


return ('I Win!!', 'Computer Wins!!', 'Tie War!!')[(w1>w2)-(w1==w2)]

注意True在Python中计算为1False0

病例

如果(w1 > w2)为真(1),那么(w1 == w2)必然为假(0)
-&燃气轮机;[(w1>;w2)-(w1==w2)]
-&燃气轮机;[1-0]等于[1]
-&燃气轮机;因此('I Win!!', 'Computer Wins!!', 'Tie War!!')[1]
-&燃气轮机;结果是'Computer Win!!'

如果(w1 > w2)为假(0),则(w1 == w2)必然为假(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!!'

此表达式使用所有三个返回值构建一个tuple,并通过对bool执行减法来访问正确的返回值。它使用的是Python中的算术运算将True解释为1,将False解释为0这一事实

对于计算机win,w1>w2为true,w1==w2为false,因此(w1>w2) - (w1==w2)=1-0=1,返回元组位置1处的元素

对于tie,操作的结果是-1,遵循相同的逻辑,因此返回元组的最后一个元素。同样,对于玩家赢了,操作的计算结果为0,因此返回元组的第一个元素

这被认为是一种不好的做法,因为它比使用if/elif/else语句更难阅读,您必须问这个问题才能理解逻辑

相关问题 更多 >