作家
登录

深入了解Python字符串对象的实现

作者: 来源: 2017-06-13 15:03:15 阅读 我要评论

    ... 
  •  
  •     pchar = a->ob_sval[i]; 
  •  
  •     v = (PyObject *)characters[pchar & UCHAR_MAX]; 
  •  
  •     if (v == NULL
  •  
  •         // allocate string 
  •  
  •     else { 
  •  
  •         ... 
  •  
  •         Py_INCREF(v); 
  •  
  •     } 
  •  
  •     return v; 
  •  
  •  
  • 数组 “characters” 也可用于函数名长度为 1 时的情况,如下所示:

    1. >>> def a(): pass 

    字符串查找

    1. >>> s = 'adcabcdbdabcabd' 
    2.  
    3. >>> s.find('abcab'
    4.  
    5. >>> 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 即可。

    1. w = n - m; 
    2.  
    3. if (w < 0) 
    4.  
    5. return -1;  

    下面看看,当你在如下 Python 代码中进行字符串查找操作时,又会有那些工作产生呢?

    当 m = 1 时,法度榜样便在字符串 s 一一个个字符地进行遍历,若匹配成功则返回对应的索引地位。在本例中,变量 mode 值为 FAST_SEARCH,意味着我们想获取的是在主字符串中初次匹配的地位,而非模式串在主字符串中成功匹配的次数。

    1. if (m <= 1) { 
    2.  
    3.     ... 
    4.  
    5.     if (mode == FAST_COUNT) { 
    6.  
    7.         ... 
    8.  
    9.     } else { 
    10.  
    11.         for (i = 0; i < n; i++) 
    12.  
    13.             if (s[i] == p[0]) 
    14.  
    15.                 return i; 
    16.  
    17.     } 
    18.  
    19.     return -1; 
    20.  
    21.  

    推敲其他情况,比如 m > 1。起首创建一个紧缩的boyer-moore delta 1 table(对应BM算法中的坏字符规矩),在此过程中须要声明两个变量:“mask” 和 “skip”。


      推荐阅读

      还敢闯红灯?“人脸识别”分分钟让你变“网红”

    大年夜家都知道闯红灯是违法的,但几乎每小我都闯过红灯,为什么?就因为违法成本低、很少有人管,并且即便闯了也很难被及时发明。对闯红灯行动现场抓拍不过跟着人脸辨认技巧的成长,这个>>>详细阅读


    本文标题:深入了解Python字符串对象的实现

    地址:http://www.17bianji.com/lsqh/35733.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)