纸上得来终觉浅,绝知此事要躬行!
目录
字符串格式化表达式
字符串格式化实现:
1.字符串格式化表达式
这是从python诞生的时候就有的最初的技术,基于C语言的“printf”模型,并且在大多数现有的代码中使用。
2.字符串格式化方法调用
这是Python2.6和Python3.0新增加的技术,Python独有的方法,且和字符串格式化表达式的功能有很大的重叠。
格式化字符串:
1.在%操作符的左侧防止一个需要进行格式化的字符串,这个字符串带有一个或多个嵌入的转换目标,都已%开头;
2.在%操作符右侧放置一个(或多个,嵌入到元组中)对象,这些对象将会插入到左侧想让Python进行格式化字符串的一个(或多个)转换目标的位置上去。
In [27]:"%s,月,星,%s" %("日","辰")
Out[27]:'日,月,星,辰'
In [2]:"大吉大利,今晚%s! %d-08"%("吃鸡",2018)
Out[2]:'大吉大利,今晚吃鸡! 2018-08'
高级字符串格式化表达式:
代码 | 意义 | 代码 | 意义 | 代码 | 意义 | 代码 | 意义 |
s | 字符串(或任何对象) | r | s,使用repr | c | 字符 | d | 十进制整数 |
i | 整数 | u | 无号整数 | o | 八进制整数 | x | 十六进制整数 |
X | x,大写打印 | e | 浮点指数 | E | e,大写打印 | f、F | 浮点十进制 |
g | 浮点e或f | G | 浮点E或F | % | 常量% |
事实上,%s可以用于任何对象的格式化表达,因为对象的每个类型都可以转换为字符串(print时使用),每一个与%s一同参与操作的对象类型都可以转换代码。
In [4]:"大吉大利,今晚%s! %s-%s"%("吃鸡",2018,[8,28])
Out[4]:'大吉大利,今晚吃鸡! 2018-[8, 28]'
在格式化字符串中,表达式左侧的转换目标支持多种转换操作,这些操作自有一套严谨语法。转换目标的通用结构看上去是这样的:
%[(name)][flags][width][.precision]typecode
在%和字符码(typecode)之间可以执行的操作:
放置一个字典的键;
罗列出左对齐(-),正负号(+)和补零(0)的标志位;
给出数字的整体长度和小数点后的位数
……
In [9]:"%f,%.3f,%.*f"%(1/3.0,1/3.0,8,1/3.0)
Out[9]:'0.333333,0.333,0.33333333'
# 可以在格式化字符串中用一个*来指定通过计算得出width和precision,迫使它们的值从%运算符右边的输出中
# 的下一项获取,这里元组中的8指定为precision
In[12]:x=1.23456
"%-6.2f %05.2f %+06.1f"%(x,x,x)
Out[12]:'1.23 01.23 +001.2'
In [13]:"%(n)d %(x)s" %{"n":1,"x":"spam"}
Out[13]:'1 spam'
字符串格式化调用方法
Python2.6和3.0及之后版本中的新的字符串对象的format方法使用主体字符串作为模板,并且接受任意多个表示将要根据模板替换的值的参数。在主体字符串中,花括号通过位置或关键字指出替换目标及将要插入的参数。
In[3]:"{name} is {0},now is {1} {time}".format("GuYue",2018,name="My name",time="8-29")
Out[3]:'My name is GuYue,now is 2018 8-29'
就像%表达式和其它字符串方法一样,format创建并返回一个新的字符串对象。