我刚开始学习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-f
或A-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'