2
a = 10
b = 20
c = 30
if(a > b,c):
    print('In if')
else:
    print('In else')

有人发布了上面的代码,并问为什么上面总是导致'In if',无论b和c的值如何都被打印出来。

虽然这看起来像是糟糕的编程风格,但我很好奇,操作员在做什么。

到目前为止,我无法在文档中找到答案。任何人都可以提供解释吗?

4

3 回答 3

5

a > b, c是元组((a > b), c)

所以如果a=10, b=20, c=30, 那么我们在询问元组(False, 30)是否为truish。所有非空元组都是真实的,所以这总是会触发通过条件的相同路径。

于 2020-12-24T03:34:27.440 回答
2

例子:

>>> 5>4,5
(True, 5)

它输出一个元组,其中元素 the result of 5>45

因为 5>4 等于True

输出将是(True, 5)

于 2020-12-24T03:35:09.257 回答
2

让我首先解释元组的结果:

在你的情况下,因为a>b是假的,元组的第一部分是False.

所以(a>b,c), 看起来像(False, 30).

现在你在问一个元组是否有一些内容。是的,它当然是有内容的,就是这样(False, 30)

这就是为什么您的if支票总是通过而不管a,b,c.

如果将一个空元组传递给if clause,那么您将看到if clause失败,如下所示。

>>> if():
    print('In if')
else:
    print('In else')

    
In else

问候

于 2020-12-24T03:40:05.977 回答