python 字符串格式化问题

Posted

tags:

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

我在书中看到一个例子,如下:
format = “pi with three decimals: %.3f”
form math import pi
print format % pi
输出如下:
pi with three decimals :3.142

我想知道format中的%号的含义是什么?
我该怎么理解字符串格式化?
谢谢

%.3f 中, % 引导后面的符号,表示用来格式化字符串后面 % 之后的变量变成字符串。
.3 表示小数点后面保留三位。f 表示将后面要格式化的变量作为浮点数来格式化。
format % pi 中的 % 表示按照 format 里面的 %.3f 的要求,将 pi 转化为字符串替换掉 format 中的 %.3f。
参考技术A 你可以理解为它是格式化的标识符追问

%.3f中%的意思?

追答

就是格式化的标示符啊,就是说你要格式化,首先要写:%(这是标志,有了它,说明你在进行格式化),其次才是你的.3f,这是浮点型字符格式化

Python中的字符串如何格式化布尔值?

【中文标题】Python中的字符串如何格式化布尔值?【英文标题】:How are booleans formatted in Strings in Python? 【发布时间】:2011-01-16 14:01:11 【问题描述】:

我知道我做不到:

"%b %b" % (True, False)

在 Python 中。我猜%b 是 b(oolean)。有这样的吗?

【问题讨论】:

你想要的结果是什么?真假?那你想要'%s'。 %b,当它存在时,用于二进制(如在 base-2 中)。 嘿,是的! “%s”似乎工作得很好。回答这个问题并得到一个选择的答案。我曾经做过“%s”% str(False)。真丢脸:) 相关文档链接:docs.python.org/library/… 【参考方案1】:

参考Python string interpolation

在 Python 3.6 中,字符串插值被添加了一个新的字符串字面量 f 前缀

shouldBeTrue = True
print(f"shouldBeTrue=shouldBeTrue")

【讨论】:

【参考方案2】:

要为 Python-3 更新这个,你可以这样做

" ".format(True, False)

但是,如果您想实际格式化字符串(例如添加空格),您会遇到 Python 将布尔值转换为底层 C 值(即 int),例如

>>> ":<8 ".format(True, False)
'1        False'

要解决这个问题,您可以将True 转换为字符串,例如

>>> ":<8 ".format(str(True), False)
'True     False'

【讨论】:

【参考方案3】:

你也可以使用Formatter class的字符串

print "0 1".format(True, False);
print "0: 1:".format(True, False);
print "0:d 1:d".format(True, False);
print "0:f 1:f".format(True, False);
print "0:e 1:e".format(True, False);

这些是结果

True False
True False
1 0
1.000000 0.000000
1.000000e+00 0.000000e+00

某些% 格式类型说明符(%r%i)不可用。详情见Format Specification Mini-Language

【讨论】:

请注意添加格式选项can screw this up. E.g. :_^5 会得到你 '__1__' 除非你 str(...) 布尔值。 你可以get around!s这样的类型转换问题:'!s:_^5'.format(True)'True_'【参考方案4】:

如果你想True False 使用:

"%s %s" % (True, False)

因为str(True)'True'str(False)'False'

或者如果你想1 0 使用:

"%i %i" % (True, False)

因为int(True)1int(False)0

【讨论】:

【参考方案5】:
>>> print "%r, %r" % (True, False)
True, False

这并不特定于布尔值 - %r 在参数上调用 __repr__ 方法。 %s(对于str)也应该可以工作。

【讨论】:

%r%s 的主要区别是什么? 我一直有这个区别,但如果我错了,请纠正我。 %s(因此 str())旨在为人类尽可能透明地表示对象。 %r(因此 repr())旨在为 python 尽可能透明地表示对象。例如,print(str("foo")) 仅在新行上打印 fooprint(repr("foo")) 但是在新行上打印 'foo',包括引号,因为这是您需要在 python 解释器中键入的内容,以获取 python 中参数的相应对象。

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

使用 PyQT5 和 Python 的字符串格式化问题 [重复]

Python 3 中的字符串格式化

Python中的字符串格式化

python 字符串格式化—format

Python格式化字符串str.format()

Python之路--Python中应该使用%还是format来格式化字符串?