为啥空字符串和 None 的评估不同? [复制]
Posted
技术标签:
【中文标题】为啥空字符串和 None 的评估不同? [复制]【英文标题】:Why do empty string and None evaluate differently? [duplicate]为什么空字符串和 None 的评估不同? [复制] 【发布时间】:2014-06-24 01:30:00 【问题描述】:为什么这两个评价不同?
In [34]: a = ''
In [35]: if a or a >=0:
print 'y'
....:
y
In [36]: a = None
In [37]: if a or a >=0:
print 'y'
....:
我认为空字符串的计算结果也为 None(我知道它们不一样)?还是它只是假的,因此评估为 0(如果像 if a: do something
一样测试,则评估为 None)?
【问题讨论】:
我错过了你感到困惑的地方。在第一个例子中?由于>= 0
部分,它打印y
。
我没想到第一个示例会打印任何内容。
这是因为 string 与 int 比较的工作方式。 if a
部分没有起作用,因为正如您所说,空字符串和 None
不是一回事。
相关:How does Python compare string and int?
Even more related。简短的回答是:你为什么要进行这样的比较?它甚至在 python 3 中得到了修复
【参考方案1】:
这是因为在 CPython 中 int
位于 string
之前
来自docs:
CPython 实现细节:除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。
所以:
>>> '1' > 1
True
【讨论】:
以上是关于为啥空字符串和 None 的评估不同? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制]
为啥 '.sort()' 导致列表在 Python 中为 'None'? [复制]