字符串格式化表达式
字符串格式化允许在单个步骤中对一个字符串执行对个特定类型的替换。严格来讲,它不是必须的,但是很实用。
字符串格式化表达式: '....%s...'%(values)
字符串格式化方法调用 '...{}...'.format(value)
关于字符串格式化表达式现在基本已经弃用,所以这里只讲字符串格式化方法调用。截止Python3.7.3还未被弃用,但是官方也表示十分不推荐,在Python只讲标准库中%的身影影响了它的弃用,但是应该快了。
字符串格式化方法基础
字符串对象的format方法,是基于支持的函数调用语法,而不是表达式语法,特别的,它使用主题字符串作为模板,并且接受任意多个参数,哦用来表示将要根据模板替换的值。
它的使用要求具备函数和调用的知识。但其使用多半是浅显易懂的。在主题字符中,花括号通过为止来指定替换目标以及将要插入的参数。花括号利用是数字,或者关键字。如{1},{food}
本质上,格式阿虎方法调用红章的主题字符串也可以是创建一个临时字符串的字面量,并且任意的对象类型对可以在目标上替换。反正结果是字符串,
添加键、属性和偏移量
格式化字符串可以指定对象属性和字典键,就像在常规的Python语法中一样,方括号指定字典的键,而点表示通过位置或关键字所引用的对象属性。
第一个例子,索引字典上的键‘kind',然后从已经导入的sys模块对象获取‘platform‘属性。第二个例子做同样的事情,但是,通过关键字而不是位置指定对象。
格式化字符串中的方括号可以指定列表及其他序列的偏移量来执行索引,但是,只有单个正偏移量才能在格式化字符串的语法中有效。因此,这一功能并不像是你想象的那样通用。要指定负的偏移量或者使用任意表达式的结果,必须在格式化字符串自身之外运行表达式。
对于最后的要求,可能时代变了,特异尝试一下,表达式,负偏移现在在格式化字符串方法中好使了,我用的是Python3.7.3
高级格式化方法语法
你可以在格式化字符串中添加额外的语法来实现更具体的测试集,对于格式化方法,我们在可能为空的替换目标的标识码中还是用一个冒号,后面紧跟着可以指定字段大小,对齐方式和特定类型编码的格式化说明符。
如下是可以在一个格式字符串中作为替代目标出现的形式化结果,替代四个部分都是可选的,中间必须有空格。
{filedname component ! conversionflag:formatspec}
在这个替代目标语法中:fieldname是便是参数的一个可选的数字或关键字。在python2.7,3.1和后续版本中可以将其省略以使用相对参数编号
component是有着大于等于两个“name”或“[index]”引用的字符串,它们可以被省略以是能用完整的参数值。其中的引用用来获取参数的数学或索引值
coversionfalg如果出现以!开始,后面跟着r,s,或者a,在这个值上分别调用repr,str,ascii内置函数。
formatspec如果出现则以:开始,后面跟着文本,指定了如何表示该值,包括字段宽度,对齐方式,补零,小数精度等细节,并且以一个可选的数据类型码结束。
冒号后面的formatspec组件本身也有丰富的格式,形式上的描述如下。
[[fill]align][sign][#][0][width][,][.precision][typecode]
其中fill可以是除{或}之外的任意填充字符;
align可以是<、>、=或……,分别表示左对齐右对齐,符号字符后的填充,或居中对齐,
sign可以是+、-或空格;
而,逗号选项请求表示千分位分隔符,
width和precision与在%表达式中相同,
formatspec也可以包含嵌套的只有字段名称的{}格式化字符串,它从参数列表动态地获取值
高级格式化方法举例
{0:10}意味着一个10字符宽的字段中第一个位置的参数,出现的:10表示10字符宽度。
用<>表示左对齐右对齐,
浮点数支持格式化声明。
s 字符串
r 与s相同,但使用repr,而不是str
c 字符(int或str)
d 10进制数字(以10为底的整数)
i 整数
o 8进制整数(以8为底)
x 16进制整数(以16为底)
X 与x相同,但是使用大写字母
e 带有指数的浮点数,小写
E 与额相同,但是使用大写字母
f 十进制浮点数
F 与f相同,但是使用大写字母
g 浮点数e或f
G 浮点数E或F
这里将3.14159变成以带有指数的浮点数,第一个没有限制,第二个限制小数点保留3位,第三个变成浮点数
还是3.14159,第一个变成浮点数,第二个浮点数小数点保留二位,第三个规定了六位数,而且用0填充,所以是06,如果只是6就用空格填充
fornat方法支持进制转换,
x16进制,o八进制,b2进制。
由于%字符串格式化表达式官方已经不建议使用,所以二者的比较以及延伸的优点这里不做讨论。