Python中-1和False有区别吗?

时间:2011-08-21 01:32:42

标签: python boolean

我一直认为在条件中使用-1总是与写 False (布尔值)相同。但是从我的代码中,我得到了不同的结果:

使用正确和错误:

def count(sub, s):
    count = 0
    index = 0
    while True:
        if string.find(s, sub, index) != False:
            count += 1
            index = string.find(s, sub, index) + 1
        else:
            return count


print count('nana', 'banana')

结果:需要很长时间才能让口译员回复。


使用1和-1:

def count(sub, s):
    count = 0
    index = 0
    while 1:
        if string.find(s, sub, index) != -1:
            count += 1
            index = string.find(s, sub, index) + 1
        else:
            return count


print count('nana', 'banana')

结果:1​​

为什么使用-1和1给我正确的结果,而使用bool值True和False不?

4 个答案:

答案 0 :(得分:3)

string.find不会返回布尔值,因此string.find('banana', 'nana', index)从不返回0False),无论{{1}的值如何}}

index

你的例子只是重复:

>>> import string
>>> help(string.find)
Help on function find in module string:

find(s, *args)
    find(s, sub [, start [, end]]) -> int

    Return the lowest index in s where substring sub is found,
    such that sub is contained within s[start,end].  Optional
    arguments start and end are interpreted as in slice notation.

    Return -1 on failure.
>>>

index = string.find('banana', 'nana', 0) + 1 # index = 3 index = string.find('banana', 'nana', 3) + 1 # index = 0 版本有效,因为它正确解释了-1的返回值!

答案 1 :(得分:2)

False是bool类型,它是int的子类型,其值为0.

在Python中,False类似于使用0,而不是-1

答案 2 :(得分:1)

出于历史和灵活性的原因,为了真值测试,相等和转换为布尔值之间存在差异:

>>> True == 1
True
>>> True == -1
False
>>> bool(-1)
True
>>> False == 0
True
>>> bool(0)
False
>>> True == 2
False
>>> bool(2)
True

答案 3 :(得分:0)

  

我一直认为在条件中使用-1总是与写入False(布尔值)相同。

1)不,它永远不会相同,我无法想象为什么你会想到这一点,更不用说总是这么想。除非出于某种原因,您只使用过if string.find或其他内容。

2)您不应该首先使用string模块。直接从文档中引用:

  

说明
     警告:您现在通常不会使用此处看到的大多数代码。      从Python 1.6开始,许多这些函数都实现为      标准字符串对象上的方法。它们曾经被实施过      一个名为strop的内置模块,但strop现在已经过时了。

因此,我们使用string.find('foobar', 'foo')类本身的.find方法(str'foobar'所属的类)来代替'foo';由于我们有该类的对象,我们可以进行绑定方法调用,因此:'foobar'.find('foo')

3).find字符串方法返回一个数字,告诉你找到子字符串的位置(如果找到)。如果未找到子字符串,则返回-1。在这种情况下,它不能返回0,因为这意味着“在开头就找到了”。

4)False将等于0。值得注意的是,Python实际上将bool类型实现为int的子类。

5)无论您使用何种语言,都不应与布尔文字进行比较。简单来说,x == False或等同物是不正确的。它在清晰度方面没有任何好处,并且创造了犯错误的机会。

你永远不会说“如果下雨是真的,我将需要一把伞”,尽管这在语法上是正确的。无关紧要;与明显的“如果下雨,我需要一把雨伞”相比,它没有更礼貌也更清晰。

如果要将值用作布尔值,则将其用作布尔值。如果要使用比较结果(即“值是否等于-1?”),则执行比较。