首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理这个条件?

如何处理这个条件?
EN

Stack Overflow用户
提问于 2017-01-05 03:27:53
回答 4查看 72关注 0票数 3

我只是在代码中遇到了一个奇怪的错误,原因是我在一个条件关键字中使用了逗号,而不是and关键字。下面是一个经过润色的示例,参见下面的代码:

代码语言:javascript
复制
def foo():
    s = set([1, 2, 3])
    a = 4
    b = 5
    if (a, b in s):      # Should have been: if (a and b in s):
        print "Foo"

foo()  # prints "Foo"

为什么条件计算为True?即使aNone,"Foo“也会被打印出来。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-05 03:32:31

表达式(a, b in s)是一个有效的Python。它将评估到真理,不管它的内容,只要它至少有一个元素。(这个有两个)。

票数 7
EN

Stack Overflow用户

发布于 2017-01-05 03:35:08

这是因为(a, b in s)的计算结果为长度-2元组(4, False),而在python中,如果元组长度为非零,则元组被认为是True

票数 3
EN

Stack Overflow用户

发布于 2017-01-05 03:50:58

代码打印'Foo‘而不管a和wether b的值在s中的原因是行:

(a, b in s)

实际上是个元组。if语句检查元组是否存在,并打印Foo。什么时候

代码语言:javascript
复制
s=set([1,2,3])
a=None
b=5

检查的条件是

代码语言:javascript
复制
if(None, False):

这总是正确的,因为

代码语言:javascript
复制
(None, False) #is a non empty tuple.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41476869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档