如何在python中使用or运算符
在我的项目中,我使用了or,但在某些情况下它有效,在某些情况下它使我失败。。 我不明白为什么如何在python中使用or运算符,python,Python,在我的项目中,我使用了or,但在某些情况下它有效,在某些情况下它使我失败。。 我不明白为什么 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 a或b计算结果为a如果a计算结果为True。如果a的计算结果为False,a或b的计算结果为b 例如: [] or 'a' #evaluat
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
a或b
计算结果为a
如果a
计算结果为True
。如果a
的计算结果为False
,a或b
的计算结果为b
例如:
[] or 'a' #evaluates to 'a'
'a' or None #evaluates to 'a'
[] or None #evaluates to None
None or [] #evaluates to []
你的(a或b)='Django'
应该是a=='Django'或b=='Django'
('Django' or 'Nomatterwhat') == 'Django' #True
([] or 'Django') == 'Django' #True
('Mono' or 'Django') == 'Django' #False
说到理论部分,试着运行这个小程序,看看
或和和是如何工作的(尤其是惰性评估部分):
a或b
计算结果为a
如果a
计算结果为True
。如果a
的计算结果为False
,a或b
的计算结果为b
例如:
[] or 'a' #evaluates to 'a'
'a' or None #evaluates to 'a'
[] or None #evaluates to None
None or [] #evaluates to []
你的(a或b)='Django'
应该是a=='Django'或b=='Django'
('Django' or 'Nomatterwhat') == 'Django' #True
([] or 'Django') == 'Django' #True
('Mono' or 'Django') == 'Django' #False
说到理论部分,试着运行这个小程序,看看或和和是如何工作的(尤其是惰性评估部分):
如果a=='Django'或b=='Django':如果a=='Django'或b=='Django':你的括号放错地方了(a或b)
将始终返回计算结果为True的a
或b
中的第一个,因此:
>>> a = "Django"
>>> b = "Pyramid"
>>> (a or b)
"Django"
>>> (a or b) == "Django"
True
但是
你真正想写的是:
>>> a == "Django" or b == "Django"
True
然而,在许多情况下,另一种可能更好的书写方式是:
if "Django" in (a, b) or "Pyramid" in (a, b):
...
或者,如果有很多选择:
if set([a, b, c, ...]) & set(["Django", "Pyramid", ...]):
...
你的括号放错地方了(a或b)
将始终返回计算结果为True的a
或b
中的第一个,因此:
>>> a = "Django"
>>> b = "Pyramid"
>>> (a or b)
"Django"
>>> (a or b) == "Django"
True
但是
你真正想写的是:
>>> a == "Django" or b == "Django"
True
然而,在许多情况下,另一种可能更好的书写方式是:
if "Django" in (a, b) or "Pyramid" in (a, b):
...
或者,如果有很多选择:
if set([a, b, c, ...]) & set(["Django", "Pyramid", ...]):
...
你应该阅读这些文件——你不知道“或”到底在做什么;-)你应该阅读这些文件——你不知道“或”到底在做什么;-)@KDawG已修复。谢谢。从你给我的答案中没有第二个问题了……谢谢。这是一个小问题,但在python中,yield
有一个特定的含义,即w.r.t.生成器和迭代器,所以从技术上讲,[]或“a”不能产生任何东西。@aquavitae请查看我对你答案的问题。我真的很好奇。@KDawG已修复。谢谢。从你给我的答案中没有第二个问题了……谢谢。这是一个小问题,但在python中,yield
有一个特定的含义,即w.r.t.生成器和迭代器,所以从技术上讲,[]或“a”不能产生任何东西。@aquavitae请查看我对你答案的问题。我真的很感兴趣。在哪个版本的python中,在哪个实现中将'Django'或'Pyramid'
解析为True
?更有趣的是:为什么('Django'或'Pyramid')=='Django'
应该是False
?我在3.3和2.7(cython)中都试过了,在这两个版本中,我得到的结果与您发布的完全不同。对不起,输入错误!应该是“Django”,如果(a,b)中的“Django”或(a,b)中的“Pyramid”起作用,我会更正答案并使意思更清楚。。。这是一个很好的练习吗???@manjusha没有错。另请参阅all
和any
的文档。在哪个版本的python和哪个实现中将'Django'或'Pyramid'
解析为True
?更有趣的是:为什么('Django'或'Pyramid')=='Django'
应该是False
?我在3.3和2.7(cython)中都试过了,在这两个版本中,我得到的结果与您发布的完全不同。对不起,输入错误!应该是“Django”,如果(a,b)中的“Django”或(a,b)中的“Pyramid”起作用,我会更正答案并使意思更清楚。。。这是一个很好的练习吗???@manjusha没有错。另请参阅all
和any
的文档。