其实这个原理你理解了根本没有任何意义,不过正好今天有点闲,可以帮你掰开讲一下:
你这个问题的原因是''在字串中没有任何实际的意义。
先看一下''的实际大小:
>>> len('')
0
然后看看这两句:
程序代码:
>>> 'foo'[0:0]
''
>>> 'foo'[1:0]
''
#...
所以任何字串都可以表示为""+"字串内容"的形式,所以不管你用以下哪种方法,都会返回一个肯定值:
>>> s = "abcde"
>>> s.find('')
0
程序代码:
>>> s = "abcde"
>>> '' in s
True
当执行s.find('')时,python解释器会认为"abcde"等同于"" + "abcde"。同理,如果你输入:
>>> s = "abcde"
>>> s.find('',5)
解释器就会给你返回5,因为"abcde" 等同于 "abcde" + "",还记得len('')的结果是0么?所以len(s)是5也可以认为len(s)+len('')=5+0=5,道理就是这样。
不过这并不表示所有find结果都会返回目标数,找寻第几处需要看你的实际字串长度——len(s),比如下面这个例子就返回了-1:
程序代码:
>>> s = "abcdef"
>>> len(s)
6
>>> s.find('',7)
-1
这是因为s只保存了6个元素,多了没有,所以python解释器不会将它转译成"abcdef"+""+""+""+""+...+""的形式(估计也是为了防止恶意增加主机负担吧)
具体可以参考这篇文档:
https://docs.
有一段是这么说的:
...
For the string and bytes types, x in y is True if and only if x is a substring of y. An equivalent test is y.find(x) != -1. Empty strings are always considered to be a substring of any other string, so "" in "abc" will return True.
...
string和bytes类型中,只有当x是y的一个子字时才会返回True。它的结果等同于y.find(x)!=-1。空字串会永远被认做是任何其它字串的子字(比如'' in ''),所以'' in "abc"会返回True
=======================================
其实这种追溯原理的心态是不太正确的,首先你没有能看清实际底层的思维和能力,第二你了解的原理对你实际帮助并不大,更谈不上提高能力了。与其纠结为什么会这样,不如纠结我想实现什么效果该怎么办……
[此贴子已经被作者于2017-5-4 08:49编辑过]