如何在python中使用或运算符

时间:2013-12-04 05:48:46

标签: python

在我的项目中,我已经使用过,但在某些情况下它可以使用,但在某些情况下它会让我感到不舒服。 我不明白为什么?

if (a or b) is not True:
    # This works for me


if (a or b) == "Django" and (c or d) == "Pyramid":
    # This fails me everytime

3 个答案:

答案 0 :(得分:3)

如果a or b评估为a,则

a评估为True。如果a评估为False,则a or b评估为b

例如:

[] or 'a' #evaluates to 'a'
'a' or None #evaluates to 'a'
[] or None #evaluates to None
None or [] #evaluates to []

您的(a or b) == 'Django'应为a == 'Django' or b == 'Django'

('Django' or 'Nomatterwhat') == 'Django' #True
([] or 'Django') == 'Django' #True
('Mono' or 'Django') == 'Django' #False

说完理论部分后,尝试运行这个小程序,看看orand是如何工作的(特别是懒惰的评估部分):

def x():
    print('X')
    return False

def y():
    print('Y')
    return True

print ('-' * 20)
x() or y()
print ('-' * 20)
y() or x()
print ('-' * 20)
x() and y()
print ('-' * 20)
y() and x()

答案 1 :(得分:1)

如果a ==' Django'或者b ==' Django':

答案 2 :(得分:0)

你的括号在错误的地方。 (a or b)将始终返回评估为True的ab中的第一个,因此:

>>> a = "Django"
>>> b = "Pyramid"
>>> (a or b)
"Django"
>>> (a or b) == "Django"
True

但是

>>> (b or a)
"Pyramid"
>>> (b or a) == "Django"
False

你真正想写的是:

>>> a == "Django" or b == "Django"
True

然而,在许多情况下编写它的另一种方法是:

if "Django" in (a, b) or "Pyramid" in (a, b):
    ...

或者,如果有很多选择:

if set([a, b, c, ...]) & set(["Django", "Pyramid", ...]):
    ...