详解Python核心对象类型字符串

yipeiwu_com6年前Python基础

Python的字符串的特点

  • Python与C语言,Java语言都不一样,没有单个字符,只有一个有一个字符的字符串。
  • 字符串对象不可修改,属于不可变类型
  • 字符串和列表,元组都从属于序列这个对象类别。所以序列支持的操作,字符串也支持。
  • 用单引号和双引号表示都行,并列的字符串串常量会自动合并,不需要显式的用加号表示。
  • 单双引号里面的特殊字符必须用转义序列表示,比如”,',\都需要在前面加个、,但是在三引号里面不需要转义。

Python的字符串的支持的基本操作

  • 支持序列的操作,比如len(‘abc')取长度
  • Python不允许混合数字和字符串的加法,比如9+'3'不会转成字符串,这点和Java不一样。
  • 分片通过偏移来指定分片的大小,[偏移A:偏移B:偏移C]从左到右偏移为正,从右到左偏移为负。偏移A省略表示最左端,偏移B省略表示最右端,如[1:]表示从索引为1到最右端。分片创建一个新的对象返回,所以用[:]可以实现拷贝。分片偏移C表示步进,从左端和右端的区间复制索引相差为步进的元素,组成新对象返回。
  • 修改字符串会产生一个新的字符串对象,这时候可能会有疑问,这样不是效率很低吗?在JAVA中确实是这样,如果用+号来合并字符串就会产生一个新对象,所以在JAVA中一般用StringBuilder避免产生过多的对象,但是在Python中没被变量引用的对象会立即回收掉空间,新对象会重用回收的空间。所以效率并不会很低。

Python的字符串转换

  • 数字与字符串之间的转换:通过内置函数int(‘42'),str(42),float(‘42')之类的来转换
  • 字符串与ASCII码之间的转换:ord(‘323')将字符串转为ASCII码,chr(23)将ASCII码转换为字符串

字符串方法

  • 修改字符串:通过合并+和分片[:]来修改,另一种是通过字符串的方法来修改。replace(‘goal','str')把字符串中的'goal'替换成'str'。find(‘index')返回字符串'index'开始的索引。list(‘sds')将字符串'sds'转换成列表['s','d','s'],这就变成了可变对象类型,可以直接对其进行多次修改,再调用”.join(列表)转换成字符串方法这比上面多次合并或切片效率要高。
  • 文本解析:split(”)方法可以将文本切割成列表。
  • 其他方法:rstrip()方法清除每行末尾空白,endswith(‘w')判断是否以'w'结尾和startswith(‘t')是否以't'开头。
  • 字符串不支持模式,需要使用Python的re标准库模块。

字符串格式化

Python支持在字符串放入%d,%s来实现类型替换,类似于C的printf。在字符串后面添加% 字符串 实现指定字符串替换,多个字符串要用()括起来。

基于字典的字符格式化

插入字符串的不再是固定的%d,%s而是%(字典的键)。替换的就是字典的值,这样有一个好处就是能把整个字符串中的对应字典键的字符串都替换成字典键对应的值。

字符串格式化调用方法

前面的都是通过表达式来进行字符串格式化。这里是通过字符串的方法进行格式化。这就和Java的占位符差不多了,template='{0},{1},{2}',template.format('s','d','s')来进行格式化。

相关文章

pyqt5 删除layout中的所有widget方法

如下所示: >>> for i in range(self.gridLayout.count()): >>> self.gridLayout.i...

python自动化工具之pywinauto实例详解

本文实例为大家分享了python自动化工具pywinauto,供大家参考,具体内容如下 一、win环境应用自动化 1.浏览器中下载 2.在cmd下启动:python get-pip.py...

python图像处理入门(一)

python图像处理入门(一)

一、环境 由于这学期开了图像处理这门课,所以想着在各种实验开始之前自己先动手试一下 图像处理那首先要配个环境嘛,配环境真的是我长久以来的噩梦了,每次都会出现奇奇怪怪的问题,首先上网查找了...

对python列表里的字典元素去重方法详解

如下所示: def list_dict_duplicate_removal(): data_list = [{"a": "123", "b": "321"}, {"a": "12...

django框架使用方法详解

django框架使用方法详解

我的文章的意义 服务端开发,python,django这些内容上面的链接中有详细的阐述. 我写的内容肯定没有上面的完备,准确. 我的文章的价值在于从一个iOS程序员的角度来理解服务端开...