前后端知识库 前后端知识库
首页
    • JavaScript
    • React
    • Vue
  • Python
  • Sanic
  • Linux
  • Ansible
归档
GitHub (opens new window)
首页
    • JavaScript
    • React
    • Vue
  • Python
  • Sanic
  • Linux
  • Ansible
归档
GitHub (opens new window)
  • Sanic

  • Python

    • Python 的动态类型介绍
    • 数字类型
    • Set类型
    • 字符串
    • 列表
    • 元组
    • 通用序列
    • 字典
    • 文件
    • 语句和语法
    • 赋值语句
    • 打印
    • if语句
    • loop循环
    • 迭代器和生成器
    • 文档
    • 函数
    • 作用域
    • 参数
    • 函数的高级特性
    • 模块
    • 模块包
    • 模块高级用法
    • 类 class
    • Python命名空间
    • 运算符重载
    • 类的设计模式
    • 类的高级主题
    • 异常
    • 异常对象
    • Unicode与字节串
    • 管理属性
    • 装饰器
    • 元类
    • 执行细节
  • backend
  • Python
devin
2023-09-09

字符串

# 字符串

1.Python 的字符串是一种不可变序列,它包含的字符存在从左到右的位置顺序。
不可变是指:字符串创建以后无法修改它的内容。

序列包括:字符串、列表、元组

  • 字符串由一对双引号或者单引号包围,二者无任何区别

    如果希望字符串中包含引号,则有两种办法:

    • 最外围的引号和字符串中的引号使用不同的格式。如"who's name is Tex?"
    • 采用转义字符。如who\'s name is Tex?'
  • 空字符串是一对引号之间不包含内容:""
  • Python 自动在任意的表达式中合并相邻的字符串常量
  • 在字符串中反斜杠代表转义序列,每个转义序列代表一个字符(不一定能够打印出来):
    • \\转义反斜杠本身
    • \n为换行符
    • \0为\0x00(不是字符串结尾)
    • \xhh为十六进制值
    • \o00为八进制值
    • \uhhhh为 16 位 Unicode 的十六进制值
    • \Uhhhhhhhh为 32 位 Unicode 的十六进制值
  • Python 中\0并不去结束一个字符串,Python 会在内存中保持整个字符串的长度和文本
  • Python 会以十六进制显示非打印的字符
  • 若无合法的转义编码识别\以及之后的字符,则 Python 会在最终的字符串中保留\

字符串

2.raw 字符串是一种特殊的字符串。当r出现在字符串起始引号之前时,为 raw 字符串。这种字符串会关闭转义机制。
raw 字符串不能以\结尾。
raw字符串

3.字符串块:以三重引号包围的字符串(引号为一对单引号或者一对双引号均可)。
三重引号之间的文本会被收集到一个单独的多行字符串中,并且将换行以\n代替。

4.字符串可以有以下操作:

  • 加:两个字符串相加,返回一个新的字符串
  • 乘:字符串与整数N相乘,返回一个新的字符串,该字符串是原字符串重复N次
  • len():返回字符串长度
  • 迭代:字符串对象是一个可迭代对象

字符串操作

5.字符串支持索引,其中S[i]获取的是偏移为i处的字符(偏移i从 0 开始, 小于等于len(S)-1)。

若偏移i大于len(S)-1则 Python 会抛出IndexError异常, 提示string index out of range

你也可以提供一个负的偏移,其中-1为最后一个字符,-n为len(S)-n处的字符。
字符串索引

6.字符串支持分片,语法为S[m:n],它返回从m开始到n(不包含n)的一个新字符串。

  • 未给出上界时,该分片默认上界为len(S)
  • 未给出下界时,该分片默认下界为 0
  • 如果是S[:],则返回字符串S的一个全新拷贝

如果增加步进参数,则语法为S[m:n:k],它返回从m开始到n(不包含n)且每隔k个元素选取一次的一个全新字符串,默认k为 1。

  • 若k为正数则从左到右步进;若k为负数,则从右向左步进
  • S[::-1]返回 S 的翻转字符串
  • 负步进时,默认的上下界极限有所不同。
    • 上界极限可以为空或者为len(S)或者为len(S)-1
    • 下界极限必须为空,否则 0 号元素会被排除掉

字符串分片

7.可以通过str()函数与repr()函数将数字转成字符串。

  • str()函数的效果类似print()的效果
  • repr()函数产生的结果可以由解释器解释。eval(repr(x))会返回x。

str()与repr()

8.可以在单个字符与它对应的 ASCII 码值之间转换:

  • ord(char):返回单个字符的 ASCII 值
  • chr(ascii_int): 返回 ASCII 值对应的字符

字符与ASCII值之间转换

9.字符串是不可变序列,因此不能原地修改一个字符串,只能够生成新的字符串并赋值给原变量。
字符串不可原地修改

10.字符串格式化表达式是基于 C 语言的 printf 格式化表达式。其格式为:

"%d %s apples" % (3,'bad')

它返回一个新的字符串。

  • 占位符有多种:
    %s:字符串; %r:也是字符串,但用repr()得到的而不是str();
    %c:字符; %d:十进制整数; %i:整数; %e:浮点指数;
    %f: 浮点十进制;%%:百分号 %, %g:自动转成浮点%e或者%f
    字符串格式化占位符

  • 转换通用目标结构为:%[(key_name)][flags][width][.precision]type _ key_name:用于从右边字典中取对应键的值(此时右边的是字典对象,而不是元组) 如:"%(n)%d %(x)%s" %{"n":3,"x":"apples"} _ flags:如果为-则左对齐;如果为+则为正负号;如果为0:则补零 _ width: 指定位宽(包括小数点在内),至少为width字符宽度 _ precision:指定小数点后几位 >width和precision可以为*,表示它们从输入的下一项中取值 (即从元组中取得) * type为类型,如d,r,f,e等
    字符串格式化表达式通用目标结构

    11.格式化字符串除了使用字符串格式化表达式之外,还可以通过字符串的.format() 方法达到同样的效果。

  • .format()方法支持位置参数、关键字参数、以及二者的混合。

    • 位置参数: "{0},{1},{2}".format('abc','def','ghi')
    • 关键字参数:"{k1},{k2},{k3}".format(k1='abc',k2='def',k3='ghi')
    • 混合使用:"{0},{1},{k}".format('abc','def',k='ghi')
      .format参数类型
  • 格式化字符串中可以指定对象的属性、字典键、序列的索引:

    • 指定字典的键:"{0[a]}".format({'a':'value'}), 注意这里的键a并没有引号包围
    • 指定对象的属性:"{0.platform}".format(sys),也可以用关键字参数: "{obj.platform}".format(obj=sys)
    • 指定序列的索引:"{0[2]}".format("abcd") ,这里只能进行正索引值,且不能分片 .format参数类型
  • 通用目标结构为: {fieldname!conversionflag:formatspec} _ fieldname为位置数字 0,1,2,... 或者为关键字,它后面可选地跟随 _ .name:则指定对象的属性 _ [index]:指定了索引 _ [key]:指定了字典的键 _ conversionflag为转换标记,可以为: _ r:在该值上调用一次repr()函数 _ s:在该值上调用一次str()函数 _ a:在该值上调用一次ascii()函数 _ formatspec为格式,其结构为: [[fill] align] [sign] [#] [0] [width] [.precision] [type] _ fill一般与align为=时配合 _ align为对齐: _ <:左对齐 _ >:右对齐 _ =:必须指定fill(单个字符),此时用这个字符填充 _ ^:居中对齐 _ sign:为正负号标记 _ #:作用未知 _ 0:补 0 _ width:位宽 _ .precision:精度 _ type:为类型,如d,r,f,e等, 但与格式化字符串表达式相比,多了b(二进制格式输出)
    .format通用目标结构 _ 某些值可以从.format()的参数中获取,如"{0:+0{1}d}".format(128,8), 其指定精度信息从format()的参数中取(参数 8)

    12.格式化单个值比较简单,可以有以下方法:

  • "%s" % 1.23

  • "%s" % (1.23,),这里(1.23,)是一个单元素元组, 而(1.23)是一个表达式

  • "{0}".format(1.23)

    13.由于 Python 内部会暂存并重复使用短字符串来进行优化,因此该短字符串在内存中只有一份。
    字符串暂存优化

    14.浮点数格式化时,采用%s说明符与%f说明符,其结果不同:
    浮点数格式化

因为按照%f格式化输出时,浮点数有精度和位宽的设定(虽然这里没有显式指定,但是它们有默认值)。而%s格式化输出时,首先调用了str()函数,然后再进行输出。

编辑 (opens new window)
上次更新: 2023/09/09, 12:09:00
Set类型
列表

← Set类型 列表→

Theme by Vdoing | Copyright © 2023-2023 devin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式