数组 “characters” 也可用于函数名长度为 1 时的情况,如下所示:
- >>> def a(): pass
字符串查找
- >>> s = 'adcabcdbdabcabd'
- >>> s.find('abcab')
- >>> 11
函数 “find” 返回一个索引值,解释是在字符串 “abcd” 的哪个地位找到字符串 “s” 的。若字符串未找到,函数返回值为 -1。
那么,内部到底干了些啥工作?内部调用了一个名为 “fastsearch” 的函数。这个函数是一个介于 BoyerMoore 和 Horspool 算法之间的混淆版本,它兼具两者的优良特点。
我们将 “s”(s = ‘adcabcdbdabcabd’)称作主字符串,而将 “p”(p = ‘abcab’)称作模式串。n 和 m 分别表示字符串 s 和 字符串 p 的长度,个中,n = 15, m = 5。
在如下代码段中,明显看到,法度榜样将进行初次剖断:若 m > n,我们就知道必定不克不及找到如许的索引号,是以函数直接返回 -1 即可。
- w = n - m;
- if (w < 0)
- return -1;
下面看看,当你在如下 Python 代码中进行字符串查找操作时,又会有那些工作产生呢?
当 m = 1 时,法度榜样便在字符串 s 一一个个字符地进行遍历,若匹配成功则返回对应的索引地位。在本例中,变量 mode 值为 FAST_SEARCH,意味着我们想获取的是在主字符串中初次匹配的地位,而非模式串在主字符串中成功匹配的次数。
- if (m <= 1) {
- ...
- if (mode == FAST_COUNT) {
- ...
- } else {
- for (i = 0; i < n; i++)
- if (s[i] == p[0])
- return i;
- }
- return -1;
- }
推敲其他情况,比如 m > 1。起首创建一个紧缩的boyer-moore delta 1 table(对应BM算法中的坏字符规矩),在此过程中须要声明两个变量:“mask” 和 “skip”。
推荐阅读
大年夜家都知道闯红灯是违法的,但几乎每小我都闯过红灯,为什么?就因为违法成本低、很少有人管,并且即便闯了也很难被及时发明。对闯红灯行动现场抓拍不过跟着人脸辨认技巧的成长,这个>>>详细阅读
本文标题:深入了解Python字符串对象的实现
地址:http://www.17bianji.com/lsqh/35733.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示