Coq*_*cot 524 python string comparison equality
我注意到我写的一个Python脚本是松散的,并将其追溯到一个无限循环,循环条件是while line is not ''.在调试器中运行它,事实证明该行''.当我改为!=''而不是is not '',它工作得很好.
另外,通常认为默认情况下使用'=='会更好,即使在比较int或Boolean值时也是如此?我一直喜欢使用'是'因为我发现它更美观和pythonic(这就是我陷入这个陷阱...),但我想知道它是否只是为了保留当你关心找到两个具有相同id的对象.
dan*_*n04 589
对于所有内置Python对象(如字符串,列表,dicts,函数等),如果x为y,则x == y也为True.
不总是.NaN是一个反例.但通常,identity(is)意味着相等(==).反之亦然:两个不同的对象可以具有相同的值.
另外,通常认为默认情况下使用'=='会更好,即使在比较int或Boolean值时也是如此?
您==在比较值和is比较身份时使用.
在比较整数(或一般的不可变类型)时,你几乎总是想要前者.有一个优化允许小整数与之比较is,但不依赖它.
对于布尔值,您根本不应该进行比较.代替:
if x == True:
# do something
Run Code Online (Sandbox Code Playgroud)
写:
if x:
# do something
Run Code Online (Sandbox Code Playgroud)
为了比较None,is None优先于== None.
我一直喜欢使用'是'因为我发现它更美观和pythonic(这就是我陷入这个陷阱...),但我想知道它是否只是为了保留当你关心找到两个具有相同id的对象.
是的,这正是它的用途.
pyg*_*iel 253
我想展示一个关于如何is和==参与不可变类型的小例子.试试看:
a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True
Run Code Online (Sandbox Code Playgroud)
is比较内存中的两个对象,==比较它们的值.例如,您可以看到Python缓存了小整数:
c = 1
b = 1
>>> b is c
True
Run Code Online (Sandbox Code Playgroud)
您应该==在比较值和is比较身份时使用.(另外,从英语的角度来看,"等于"与"是"不同.)
小智 67
逻辑没有缺陷.该声明
如果x是y,那么x == y也是True
永远不应该被理解为
如果x == y则x为y
读者认为逻辑陈述的反转是正确的,这是一个逻辑错误.见http://en.wikipedia.org/wiki/Converse_(logic)
| 归档时间: |
|
| 查看次数: |
968597 次 |
| 最近记录: |