没有占位符的 python 格式功能有什么作用?



我刚开始学习python。并阅读有关python格式的信息。 现在我正在遵循的教程之一有以下示例。

print(format(16,'x'))

它给出输出

10

这个值 10 表示什么,这个格式函数在没有占位符文本的情况下做什么?

"x"表示值(在本例中为数字 16(应转换为十六进制,对大于 9 的数字使用小写字母。

16 的十六进制表示形式是 10 - 这就是您的示例打印10的原因。

另请注意,内置format函数与str.format不同。

详细信息: https://docs.python.org/3/library/functions.html#format

format()

不带占位符,因为它不是字符串模板。您将该函数与str.format()方法或格式化字符串文本混淆:

>>> value = 16
>>> "This is a template with a placeholder: {:x}".format(value)
'This is a template with a placeholder: 10'
>>> f"This is a formatted string literal with placeholder: {value:x}"
'This is a formatted string literal with placeholder: 10'

请注意,上述值也输出值为 16 的10!这是因为{...}占位符包含一些额外的信息,即:x部分。更多内容见下文。

format()函数将占位符中给出的指令与要放置在该占位符中的值组合在一起;{}:之后的所有内容都作为该函数的第二个参数给出。

因此,对于上述格式化字符串文本,{value:x}占位符的内容将替换为返回值format(value, 'x')

>>> format(value, 'x')
'10'

'x'值称为格式规范,那么,您在这里要研究的是格式化规范迷你语言,它告诉您x生成整数的小写十六进制表示形式。 16 十进制,十六进制,是10.

从格式规范文档中:

'x'
十六进制格式。以 16 为基数输出数字,对 9 以上的数字使用小写字母。

'X',也有一个大写变体,但对于16来说,这没有任何区别,因为该值中没有使用任何a-fA-F"数字",但您可以看到42的区别:

>>> value = 42
>>> format(value, 'x')
'2a'
>>> format(value, 'X')
'2A'

这实际上取决于value的类型以及支持的格式说明符。datetime.datetime()datetime.date()对象都有自己的格式说明符!

>>> from datetime import datetime, date
>>> format(datetime.now(), "%H:%M:%S, %A %B %d %y")
'16:36:04, Monday November 25 19'
>>> format(date.today(), "%Y-%m-%d")
'2019-11-25'

标准类型的格式规范都在我链接到的迷你语言规范中描述;你可以用它们做很多强大的事情,包括文本对齐或约束长文本。

实际上,您可以通过为自定义格式提供__format__方法,为自己的类型提供对自定义格式的完全支持。format(value, spec)基本上调用value.__format__(spec),添加一些健全性检查。

所以为了完整地循环,整数有一个__format__的方法:

>>> value
42
>>> type(value)
<class 'int'>
>>> value.__format__('x')
'2a'
>>> value.__format__('X')
'2A'

但我们通常只使用format()或字符串模板。

请注意,字符串模板具有更多format()无法处理的功能。您还可以在占位符中使用!s!r!a转换;它们分别增加了对str()repr()ascii()的调用。当您的值没有良好的格式支持或想要从中获得良好的调试信息时,它们非常方便。

说到调试,如果你使用 Python 3.8 或更高版本,你可以在格式化字符串文字中的表达式后面添加=,表达式本身也会包含在输出中:

>>> f"This is the value: {value:X}"
'This is the value: 2A'
>>> f"This is the value: {value=:X}"
'This is the value: value=2A'

当您在其中使用更复杂的表达式时,这尤其有用;空格将被保留:

>>> f"This is the value: {value * 17 = :X}"
'This is the value: value * 17 = 2CA'

相关内容

最新更新