以下条件给出相同的结果.它们之间是否有任何性能(或任何其他)差异?
1.
if (x != None) and (y != None):
# Proceed
Run Code Online (Sandbox Code Playgroud)
2.
if (x and y) is not None:
# Proceed
Run Code Online (Sandbox Code Playgroud)
In [44]: x = False
In [45]: y = None
In [46]: (x != None) and (y != None)
Out[46]: False
In [47]: (x and y) is not None
Out[47]: True
Run Code Online (Sandbox Code Playgroud)
顺便说一下,当测试某些东西是否时,最好进行测试
if x is None
Run Code Online (Sandbox Code Playgroud)
而不是
if x == None
Run Code Online (Sandbox Code Playgroud)
结果可能不同:
class Egalitarian(object):
def __eq__(self, other):
return True
x = Egalitarian()
print(x == None)
# True
print(x is None)
# False
Run Code Online (Sandbox Code Playgroud)
您需要了解您正在做什么才能了解真正的差异,您可能认为以下是一个简单的陈述:
>>> if (x and y) is not None:
Run Code Online (Sandbox Code Playgroud)
这不是一个简单的条件语句。在这里,您首先评估(x and y)哪个将返回它找到的最后一个Truthy值,或者它找到的第一个Falsey值,然后将其与 进行比较is not None。这有时会产生意想不到的结果。(请参阅和的特殊性质andor)
如果您想检查以确保两者 x都不y是,None您应该执行如下操作:
>>> if all(var is not None for var in [x, y]):
Run Code Online (Sandbox Code Playgroud)
这几乎与以下内容相同:
>>> if x is not None and y is not None:
Run Code Online (Sandbox Code Playgroud)
只是更容易阅读,并且更健壮(如果您添加更多变量来检查),
无论哪种方式,您的两个语句之间的区别在于第一个语句实际上会执行您所期望的操作,但您应该使用is not而不是!=在涉及None. 第二个语句有时可能有效,但正在做一些您可能没有预料到的事情。
程序员的妻子问他:你想要早餐吃香肠或培根吗? - 是的,他回答.(一个真实的故事).
在日常使用中使用布尔结构时,我们倾向于跳过公共部分,因此X(Y) @ X(Z)变为X @ (Y,Z):
Her bunny is happy and her hamster is happy (1)
Run Code Online (Sandbox Code Playgroud)
是相同的
Her bunny and her hamster are happy
Run Code Online (Sandbox Code Playgroud)
然而,在编程中,我们不能承包这样的东西.第一个声明
bunny == happy and hamster == happy
Run Code Online (Sandbox Code Playgroud)
如果两只宠物都没事,那将是真的.第二个短语从字面上翻译成:
(bunny and hamster) == happy
Run Code Online (Sandbox Code Playgroud)
在这里,(bunny and hamster)评估为
- a falsy value, if she's got no bunny
- the hamster otherwise
Run Code Online (Sandbox Code Playgroud)
所以(bunny and hamster) == happy实际上全文:
She's got a bunny and her hamster is happy
Run Code Online (Sandbox Code Playgroud)
这与声明(1)完全不同
在python中:
>>> happy = 1
>>> sad = 2
>>> bunny = sad
>>> hamster = happy
>>> bunny == happy and hamster == happy
False
>>> (bunny and hamster) == happy
True
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1986 次 |
| 最近记录: |