在看到Python中strip的时候产生了疑问

strip() 用于移除字符串头尾指定的字符(默认为空格)

开始测试:

>>> s = 'ncy_123.python'
>>> s.strip('123')
'ncy_123.python'

疑问:明明指定要删除123,但是为什么返回值根本没有变,继续测试

>>> s.strip('andyandc_3g1t2m')
'.pytho'
>>> s.strip('_3g1t2m')
'ncy_123.python'

两个测试返货结果不一样

    这时候发现,字符串s在使用strip()的时候,只有在第一个字符被删掉之后,再去匹配后边的字符。

原理应该是这样:s.strip('andyandc_3g1t2m') 根据strip中的字符开始匹配字符串s,第一个为n,开始查找strip,有n,此时 s = 'cy_123.python',继续匹配strip如果有c则删掉c。此时如果没有找到c,那么直接返回字符串s = 'cy_123.python'。
对理论进行测试:

>>> s.strip('anyb_3g1t2m')
'cy_123.pytho'

测试成功
结论就是在字符串前面(或者后边)的字符未被删除之前,就算该字符后边与strip匹配也不进行删除,并且strip()中的字符是无序的只要能匹配就可以删掉,不论前后。
所以

>>> s.strip('anyb_3g1t2m')
'cy_123.pytho'
>>> s.strip('_3g2t2manyb')
'cy_123.pytho'

返回结果是一样的。

 那么对s.lstrip()和s.rstrip()就好理解了

s.lstrip()是从左边第一位开始进行匹配,有则删除,如果第一位未删除,即使后边匹配,仍然无效。
eg.

>>> s.lstrip('ycaglkjhg_123')
'ncy_123.python'
>>> s.rstrip('aothpy.321')
'ncy_123.python'

不管从左还是右,只要前边的字符未匹配删除成功,后边保持原样。

  到这时,仍然有个疑问,字符串的左右是从字符串的0位置和-1位置,那如果正好全部匹配,会不会删掉整个字符串。

eg.

>>> s.lstrip('anbc.y_3t2h1op')
''

答案是会的,只不过是从左或者从右开始。

Python中的strip()的理解的更多相关文章

  1. python中对多态的理解

    目录 python中对多态的理解 一.多态 二.多态性 三.鸭子类型 python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多 ...

  2. Python中“if __name__=='__main__':”理解与总结

    1 引言 在Python当中,如果代码写得规范一些,通常会写上一句“if __name__==’__main__:”作为程序的入口,但似乎没有这么一句代码,程序也能正常运行.这句代码多余吗?原理又在哪 ...

  3. 对于Python中回调函数的理解

    关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...

  4. 对python中的__name__的理解

    一开始学习python的时候,不理解python中的__name__的用途,一致感觉__name__的返回结果就是__main__ 今天系统的看了一下,才理解过来,__name__真正的用处是用在使用 ...

  5. python中的strip()方法

    python中字符串str的strip()方法 str.strip()就是把字符串(str)的头和尾的空格,以及位于头尾的\n \t之类给删掉. 例1: str=" python " ...

  6. 对python中元类的理解

    1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: >>> class ObjectCreator(object): ...

  7. python 中is和== 的理解

    Python中的对象包含三要素:id.type.value其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值is判断的是a对象是否就是b对象,是通过id来判断的==判断的是a对 ...

  8. 对 Python 中 GIL 的一点理解

    GIL(Global Interpreter Lock),全局解释器锁,是 CPython 为了避免在多线程环境下造成 Python 解释器内部数据的不一致而引入的一把锁,让 Python 中的多个线 ...

  9. Python中if __name__ == '__main__':理解

    在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在python编 ...

随机推荐

  1. c++ 哈希表(hash表)

    一.定义 Hash表,也称散列表.一般应用于有大量"动态"的插入(删除)和查找操作的一类问题.(如果是"静态"的,通常可以先对数据排序,查找时就可以用" ...

  2. OpenCV学习(10) 图像的腐蚀与膨胀(1)

    建议大家看看网络视频教程:http://www.opencvchina.com/thread-886-1-1.html    腐蚀与膨胀都是针对灰度图的形态学操作,比如下面的一副16*16的灰度图. ...

  3. Informatica 常用组件Source Qualifier之五 User Defined Join

    User defined join :      输入用户定义的联接与输入自定义 SQL 查询类似.但是,只需输入 WHERE 子句的内容,而不是整个查询. 添加用户定义的联接时,源限定符转换包括默认 ...

  4. TZOJ 1072: 编辑距离(动态规划)

    1072: 编辑距离 时间限制(普通/Java):1000MS/10000MS     内存限制:65536KByte 总提交: 917            測试通过:275 描写叙述 如果字符串的 ...

  5. tm标准mvc框架对应robotlegs 的mvc

    tm标准mvc框架对应robotlegs 的mvc+s (其实都是一样样滴)

  6. API的文件遍历,未使用CFileFind,因为里面牵扯MFC,编个DLL好麻烦。

    // FindFileDebug.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "FindFileDebug. ...

  7. GTID数据库备份

    rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID] 1.mysql5.6在复制方面的新特性: (1).支持多线程复制:事实上是针对每个database开启相应的独立线程,即每 ...

  8. RaceWeb介绍(7):由500强公司数据高速生成百度地图——生成坐标字段及坐标数据

    接上篇. 一.生成X坐标.Y坐标两个字段. 我们须要为每一个公司建立X坐标和Y坐标字段,用来保存XY坐标. 既然为了突出"快",这一步就有程序来完毕吧. 右键单击"世界5 ...

  9. mysql.sock文件的作用

    mysql.sock应该mysql的主机和客户机在同一host上的时候,使用unix domain socket做为通讯协议的载体,它比tcp快.Mysql有两种连接方式: (1)TCP/IP  (2 ...

  10. 教大家如何在word 2007中同时打出对齐上下标以及字母头上有波浪线(非编辑器)

    教大家如何在word 2007中打出(非编辑器): 如果要在多个字符串上面加上划线,可以使用一下步骤 按下“Ctrl+F9”组合键,出现“{}”,在{}中输入“EQ \x\to(要加上划线的字符串)” ...