我对python有一点怀疑。
x = ''
if x:
print 'y'
所以,它永远不会打印为'y'
如果我做 :
x = 0
if x:
print 'y'
然后它也会做同样的事情。
那么如何区分我是否有 '' 值和 0 值如果我只需要考虑 0 值?
我对python有一点怀疑。
x = ''
if x:
print 'y'
所以,它永远不会打印为'y'
如果我做 :
x = 0
if x:
print 'y'
然后它也会做同样的事情。
那么如何区分我是否有 '' 值和 0 值如果我只需要考虑 0 值?
那是因为对象起作用__nonzero__()
并将__len__()
用于评估条件。从文档:
object.__nonzero__(self)
调用实现真值检测和内置运算
bool()
;应该返回False
orTrue
,或它们的整数等价物 0 或 1。如果未定义此方法,__len__()
则调用该方法,如果已定义,则如果其结果为非零,则认为该对象为真。如果一个类既不定义__len__()
也不定义__nonzero__()
,它的所有实例都被认为是真的。
通过重载这些,您也可以用于为自定义类指定此类行为。
至于 if 条件,您可以准确指定要检查的内容:
if x: # evaluate boolean value implicitly
pass
if x is 0: # compare object identity, see also id() function
pass
if x == 0: # compare the object value
pass
至于隐式布尔评估的特殊情况:如果int
对象非零,则考虑对象;如果对象的长度不为零,则考虑对象。True
str
True
在 python 中,对于一个条件,一个空的可迭代(这里是字符串)被评估为 false。
如果您需要检查一个值是否0
明确,您必须说x==0
if x != '':
print 'y'
仅当 x 不是时才有效''
我不清楚你真正想要什么 - 你的问题的措辞有点令人困惑 - 但这可能很有启发性:
>>> test_values = [0,0.00,False,'',None, 1, 1.00, True, 'Foo']
>>> for v in test_values:
if (not v) and (v != ''):
print "Got a logically false value, %s, which was not the empty string ''" % v.__repr__()
Got a logically false value, 0, which was not the empty string ''
Got a logically false value, 0.0, which was not the empty string ''
Got a logically false value, False, which was not the empty string ''
Got a logically false value, None, which was not the empty string ''