0

我对python有一点怀疑。

x = ''
if x:
    print 'y'

所以,它永远不会打印为'y'

如果我做 :

x = 0
if x:
    print 'y'

然后它也会做同样的事情。

那么如何区分我是否有 '' 值和 0 值如果我只需要考虑 0 值?

4

4 回答 4

4

那是因为对象起作用__nonzero__()并将__len__()用于评估条件。从文档

object.__nonzero__(self)

调用实现真值检测和内置运算bool();应该返回Falseor True,或它们的整数等价物 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对象非零,则考虑对象;如果对象的长度不为零,则考虑对象。TruestrTrue

于 2012-04-11T07:38:35.700 回答
3

在 python 中,对于一个条件,一个空的可迭代(这里是字符串)被评估为 false。

如果您需要检查一个值是否0明确,您必须说x==0

于 2012-04-11T07:34:23.753 回答
2
if x != '':
    print 'y'

仅当 x 不是时才有效''

于 2012-04-11T07:31:57.887 回答
0

我不清楚你真正想要什么 - 你的问题的措辞有点令人困惑 - 但这可能很有启发性:

>>> 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 ''
于 2012-04-11T07:41:51.113 回答