python字符串格式化啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python字符串格式化啥意思相关的知识,希望对你有一定的参考价值。

在python中也有类似于c中的printf()的格式输出标记。在python中格式化输出字符串使用的是%运算符,通用的形式为
格式标记字符串 % 要输出的值组
其中,左边部分的”格式标记字符串“可以完全和c中的一致。右边的\'值组\'如果有两个及以上的值则需要用小括号括起来,中间用短号隔开。重点来看左边的部分。左边部分的最简单形式为:
%cdoe
其中的code有多种,不过由于在python中,所有东西都可以转换成string类型,因此,如果没有什么特殊需求完全可以全部使用’%s‘来标记。比如:
\'%s %s %s\' % (1, 2.3, [\'one\', \'two\', \'three\'])
它的输出为\'1 2.3 [\'one\', \'two\', \'three\']\',就是按照%左边的标记输出的。虽然第一个和第二值不是string类型,一样没有问题。在这个过程中,当电脑发现第一个值不是%s时,会先调用整型数的函数,把第一个值也就是1转成string类型,然后再调用str()函数来输出。前面说过还有一个repr()函数,如果要用这个函数,可以用%r来标记。除了%s外,还有很多类似的code:
整型数:%d
无符号整型数:%u
八进制:%o
十六进制:%x %X
浮点数:%f
科学记数法: %e %E
根据数值的不同自动选择%e或%f: %g
根据数值的不同自动选择%E或%f: %G
就跟前面说用\\进行转义一样,这里用%作为格式标记的标识,也有一个%本身应该如何输出的问题。如果要在”格式标记字符串“中输出%本身,可以用%%来表示。
上面说的只是格式标记的最简间的形式,来看复杂一点的:
‘%6.2f’ % 1.235
在这种形式中,在f的前面出现了一个类似小数的6.2它表示的意思是,总共输出的长度为6个字符,其中小数2位。还有更复杂的:
‘%06.2f’ % 1.235
在6的前面多了一个0,表示如果输出的位数不足6位就用0补足6位。这一行的输出为‘001.24’,可以看到小数也占用一位。类似于这里0这样的标记还有-、+。其中,-表示左对齐,+表示在正数前面也标上+号,默认是不加的。最后来看最复杂的形式:
‘%(name)s:%(score)06.1f’ %\'score\':9.5, \'name\':\'newsim\'
这种形式只用在要输出的内容为dictionary(一种python的数据类型)时,小括号中的(name)和(score)对应于后面的键值对中的键。前面的例子可以看到,”格式标记字符串“中标记的顺序和"要输出的值组"中的值是一一对应的,有顺序,一对一,二对二。而在这种形式中,则不是,每个格式标记对应哪个值由小括号中的键来指定。这行代码的输出为:\'newsim:0009.5\'。

有时候在%6.2f这种形式中,6和2也不能事先指定,会在程序运行过程中再产生,那怎么输入呢,当然不能用%%d.%df或%d.%d%f。可以用%*.*f的形式,当然在后面的”要输出的值组“中包含那两个*的值。比如:\'%*.*f\' % (6, 2, 2.345)就相当于\'%6.2f\' % 2.345。
这是这本书到此为止看起来最复杂的内容。不过如果记不住,或不想那么耐烦,完全可以全部用%s代替,或者用多个"+"来构造类似的输出字符串。这里的%真有点除法的味道,怪不得设计者会选择用%这个除号。

象C 中的sprintf函数一样,可以用“%”来格式化字符串
Table 3.1. 字符串格式化代码
格式 描述
%% 百分号标记
%c 字符及其ASCII码
%s 字符串
%d 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
%n 存储输出字符的数量放进参数列表的下一个变量中
参考技术A

Python字符串格式化的方法主要有三种:

第一种:%s

%运算符(求余符)也可用于字符串格式化。给定 'string' %
values,则string中的%实例会以零个或多个values元素替换。如果是多个值,请用()括起来。

print('%s,%s %s' % ("Hi,", "Hello", "World"))

Terminal:

Hi,,Hello World

第二种:format

字符串格式化的第二种方法,字符串format()方法。格式:str.format().
这里写个示例,字符串格式化可以使用索引也可以使用关键字的形式。

print("1, 0 world".format("Hello","hi", world="World"))

Terminal:

hi, Hello World

第三种:f-字符串

格式化字符串字面值(简称为f-字符串)在字符串前加前缀f或F,通过 expression 表达式,把Python表达式的值添加到字符串内。

python 3中的字符串格式“%g%%”是啥意思? [复制]

【中文标题】python 3中的字符串格式“%g%%”是啥意思? [复制]【英文标题】:What is the string format "%g%%" mean in python 3? [duplicate]python 3中的字符串格式“%g%%”是什么意思? [复制] 【发布时间】:2019-03-03 09:12:02 【问题描述】:

根据python 3文档,格式化“%%”的字符串表示“一个百分号”。

以下代码为示例:

"%g%%" % 10.34 == "10.34%"

我不确定这里的“%g”是什么意思,我怀疑应该是同一个意思 作为字符串格式中的“%g”,即“%f 或 %e 中较短的一个”。 “%f”或“%e”表示 “浮点实数”或“指数记数法,小写'e'”。 例如:

"%f" % 10.34 == '10.34000'

"%e" % 1000 == '1.000000e+03'

基于这种理解,我尝试了以下代码。我会先格式化 x, 然后直接使用格式化字符串“%%”,但是不行。

x = '%g' % 10.34
print(isinstance(x, float)) #this returns false
"%%" % x == "10.34%" # this returns error

然后我尝试了这个:

x = float(10.34)
print(isinstance(x, float)) #this returns true
"%%" % x == "10.34%" # this returns error as well

我什至试过这个:

x = "10.34000"
"%%" % x == "10.34%" # this returns error as well

任何人都知道“%%”是怎么回事。这是什么意思,在任何情况下我们都必须使用“%g%%”和“%%”吗?

这已经解决了,问题来自于书的误导。我在这里做了cmets:

【问题讨论】:

如果% 是一个元字符,你将如何在格式化结果的输出 中包含一个实际的%?答案是%%%% 序列不格式化任何其他值,它在输出中格式化 % 是的。你说的对。我现在明白了。 “%%”不是一种格式,而是一种输出符号“%”的方式。因此我们在使用“%%”时必须包含一个格式,这个格式可以是“%d”、“%f”或“%s”等。 如果使用%运算符将该字符串用作printf样式格式的模板,则模板字符串中的%字符具有特殊含义。您可以使用%% 而不使用其他元字符:"This works: %%" % (),但这有点没有意义,对吧? 是的。你是对的。 【参考方案1】:

既然% 引入了一种格式,那么肯定有某种方法可以指定文字%;那就是%%

>>> print("%s%%" % "foo")
foo%

这类似于\\ 如何在字符串中指定文字反斜杠。

【讨论】:

以上是关于python字符串格式化啥意思的主要内容,如果未能解决你的问题,请参考以下文章

python字符串格式化啥意思

在 Python 格式(f-string)字符串中,!r 是啥意思? [复制]

x%在python中啥意思

python里的.format()是啥意思

python中map(lambda x: x % mydict, mylist)是啥意思?

Python中print(":^4".format(i),end=' ')是啥意思啊?