提问人:Coquelicot 提问时间:6/7/2010 最后编辑:Coquelicot 更新时间:12/7/2016 访问量:1100225
Python 中的字符串比较:is vs. == [duplicate]
String comparison in Python: is vs. == [duplicate]
问:
我注意到我正在编写的一个 Python 脚本表现得很松鼠,并将其跟踪到一个无限循环,其中循环条件是 。在调试器中运行它,结果发现该行实际上是 .当我将其更改为 而不是 时,它工作正常。while line is not ''
''
!=''
is not ''
此外,通常认为默认情况下只使用“==”是否更好,即使在比较 int 或 Boolean 值时也是如此?我一直喜欢使用“is”,因为我发现它更美观和更像python(这就是我落入这个陷阱的原因......),但我想知道它是否只是为了在你关心寻找两个具有相同id的对象时保留。
答:
看这个问题
你的阅读逻辑
对于所有内置的 Python 对象(如 字符串、列表、字典、函数、 等),如果 x 是 y,那么 x==y 也是 真。
略有瑕疵。
如果适用,则为 True,但不会反向应用。 可能产生 True,而产生 False。is
==
==
is
评论
is
impile 仅对内置类型必须为 true。人们可以很容易地编写一个对象不等于自身的类。==
is
==
对于所有内置的 Python 对象(如 字符串、列表、字典、函数、 等),如果 x 是 y,那么 x==y 也是 真。
并非总是如此。NaN 就是一个反例。但通常,恒等式()意味着相等()。反之则不然:两个不同的对象可以具有相同的值。is
==
另外,通常认为默认情况下只使用“==”更好,甚至 在比较 int 或 Boolean 值时?
在比较值和比较标识时使用。==
is
在比较整数(或一般的不可变类型)时,你几乎总是想要前者。有一个优化允许将小整数与 进行比较,但不要依赖它。is
对于布尔值,您根本不应该进行比较。而不是:
if x == True:
# do something
写:
if x:
# do something
对于比较 ,优于 。None
is None
== None
我一直喜欢使用“is”,因为 我发现它在美学上更令人愉悦 和pythonic(这就是我陷入的方式 这个陷阱...),但我想知道是不是 打算只保留到什么时候 你关心的是找到两个对象 具有相同的 ID。
是的,这正是它的用途。
评论
x is x
x == x
is
==
nan = float('nan'); nan is nan; nan == nan
我想举一个小例子来说明如何和参与不可变类型。试试:is
==
a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True
is
比较内存中的两个对象,比较它们的值。例如,您可以看到 Python 缓存了小整数:==
c = 1
b = 1
>>> b is c
True
在比较值和比较标识时,应使用。(此外,从英语的角度来看,“equals”与“is”不同。==
is
评论
datetime.date.today() == datetime.date.today()
datetime.date.today is datetime.date.today()
str(None) is 'None'
False
str(None) == 'None'
True
x = 'foo'; y = 'bar'.replace('bar', 'foo'); (x is y) == False
逻辑没有缺陷。声明
如果 x 是 y,那么 x==y 也是 True
永远不应该被理解为意味着
如果 x==y 则 x 为 y
对于读者来说,假设逻辑陈述的反面是正确的是一个逻辑错误。参见 http://en.wikipedia.org/wiki/Converse_(逻辑)
评论
id
评论