我一直认为在条件中使用-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不?
答案 0 :(得分:3)
string.find
不会返回布尔值,因此string.find('banana', 'nana', index)
将从不返回0
(False
),无论{{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?”),则执行比较。