Python碎片日记14——字符串:代码转换、多次修改优化、格式化

代码转换

ord('s')# 将单个字符转换为ASCII码
chr(115)#将ASCII码转换为字符
int('1101',2)#将字符串以2进制翻译成int
eval('[1,2,3]') #内置函数,可以将字符串转化为任意类型对象(字符串表面看起来的类型,转义符会被自动忽略)

多次修改优化

由于字符串时不可变的,每进行一次修改就要产生一个新对象,如果对一个超长字符串进行多次修改,为了优化性能,可以先将字符串转化为可变的类型,在修改后再转换回来。

S = 'sleeping'
L = list(S)
L[3] = 'M'
S = ''.join(L)

格式化

1、%格式化表达式

使用%符号,左面是一个带有转换目标的需要格式化的字符串,右面是待插入的对象。当右侧值多于一个的时候,必须要放在一个元组中。

'%d %s %d you'% (1, 'spam', 4) # '1 spam 4 you'

S = 'sleeping'
L = list(S)
parts = L[0], L[-1], L[1:-2]
'first=%s, last=%s, middle=%s'%parts #"first=s, last=g, middle=['l', 'e', 'e', 'p', 'i']"

"%s"%((1,2,3),)#如果想要输出元组,就把该元组放到另一个元组中

由于所有的对象都可以转换为字符串,所以除非特殊格式化,基本所有对象都可以使用%s来表示待转换目标。
格式化代码:
在这里插入图片描述通用结构:
在这里插入图片描述操作:

  • 放置一个字典的键
  • 罗列出左对齐(-),正负号(+),和补零(0)的标志位
  • 给出数字的整体长度和小数点后的位数(width和precision都可以编码为一个*,以指定他们应该从输入值的下一项中取值)
  • 其他详见标准手册

示例:

x = 1234.5678
'%-9.3f %+010.2f %*.*f'%(x,x,11,4,x) #'1234.568  +001234.57   1234.5678'
#当不用0补齐时,如果设置的总体长度超过数字长度,会默认在左边加适量空格,如果是左对齐,就在右边加空格 

基于字典的格式化

在字符串中引用字典的键(即是通用结构中的(name)),在待转换对象中放入字典,即可实现转换。常用于HTML和XML的程序中。
示例:

L = {'n':123, 'x':'hhh'}
"%(n)d %(x)s"%L  #'123 hhh'
"%(n)d %(x)s"%dict(n=444, x='234')  #'444 234'

这种方法也常与内置函数vars配合(vars()返回一个字典,包含所有变量和对应的赋值,所有指的是程序的所有,包括自定义和自带的):

s = 435
n = [4,6]
e = 'ww'
'%(s)d  %(n)s %(e)s'%vars() #'435  [4, 6] ww'

2、format格式化调用方法

使用花括号{}以及format将对象传递给字符串。
在这里插入图片描述在新版本的python中,{}中的数字可以省略,由程序自行匹配。
使用方括号指定字典键,使用点表示属性:
在这里插入图片描述使用其他序列也可以(如列表),但是其索引只能正向偏移量,因此并不是十分通用。如果想要使用负的偏移或分片,或者任意表达式,必须在字符串之外运行:
在这里插入图片描述

{}中添加具体格式化

形式如下:
在这里插入图片描述filename指定一个数字或者指代名,可以带[]索引,同上面介绍的{}里面的内容一样。
coversionflag可以是r、s、a,分别代表该值对repr、str或ascii的调用。
formatspec指定了字符串一些具体的格式,如字段宽度、对齐方式、补零、小数点精度等。具体组成如下:
在这里插入图片描述其中, align可以是<、>、=、^,分别代表左对齐、右对齐、一个标记字符后的补充、居中对齐。
除了普通的硬编码,类似于%格式化表达式中的*,formatspec也支持嵌套、只带有{}的格式化字符串,从参数列表中动态地获取值:
在这里插入图片描述此外,格式化方法中typecode除了格式化表达式支持的那些以外,还支持二进制类型编码‘b’。
具体详见库手册

%与format比较

  • 通常情况下,格式化%表达式书写起来更加方便。
  • 但是格式化方法囊括格式化表达式的功能,此外,它还具有一些额外功能:二进制类型编码、千分位分组、支持直接的键和属性引用,并且可读性更好。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值