我是Python的初学者,试图了解字符串格式如何帮助在同一行中列出数字的十六进制,八进制,十进制和二进制版本。
我试图理解所提供代码段的逻辑。
"{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(i,width = width)
我不明白上面的代码是如何工作的。主要是:
0的功能是什么:
{width}的功能是什么(用于间距)
d
,o
,X
和b
是什么以及如何评估它们。
为这个冗长的问题表示歉意,我是一个初学者,我似乎还不明白其他任何解释。
答案 0 :(得分:0)
了解一段代码的最简单方法是在适当的时候在Python解释器中执行代码(see this documentation,如果您不知道解释器的工作原理)。在这种情况下,我建议您首先运行该行,然后看看会发生什么。
>>> "{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(i,width = width)
...
NameError: name 'i' is not defined
首先,您会发现名称错误,这意味着未分配变量i
。让我们将其更改为42。
>>> "{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(42,width = width)
...
NameError: name 'width' is not defined
当然,我们还需要指出width
是什么。让我们尝试使用值8
。
>>> "{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(42,width = 8)
' 42 52 2A 101010'
现在,我们得到了一些可行的方法。那么width
是什么?您会看到它影响您获得的不同值左侧的间距。让我们尝试将其更改为14
。
>>> "{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(42,width = 14)
' 42 52 2A 101010'
空间确实增加了。现在,基于您的问题的标题,我将假定您知道什么是十六进制,二进制,十进制和八进制数字。作为非常的简短复习,请知道:
您可能想知道的是:为什么每个数字表示的开头都出现0(零)?正如您所提到的,这是字符串格式的一部分。您可以在official documentation中找到有关此主题的更多信息。这意味着每当您在字符串中的大括号中0
时,传递给.format()
函数的第一个值(在本例中为42
)将替换{{ 1}},并将对其应用格式。
以下是其工作方式的一个示例。您不必局限于使用0
。实际上,您可以使用其他数字,例如:
0
如果只有一个值,您甚至可以完全跳过花括号内的数字:
>>> "{0} is a number, {1} is another number and {0} is the same as the first number.".format(12, 24)
'12 is a number, 24 is another number and 12 is the same as the first number.'
要了解花括号右侧,在冒号之后,您需要查看我之前引用的文档。但是,作为一个快速入门,假设您要显示一个带两位小数的浮点数。您会说>>> "{} is a number.".format(12)
'12 is a number.'
表示2位数的精度,而说.2
表示f
。看起来像:
float
在您的特定示例中,>>> "{0:.2f} is a number.".format(12)
'12.00 is a number.'
代表十进制,d
代表八进制,o
代表 heXadecimal 和X
代表 binary 。您可以看到这是真的,因为在b
给出的示例中,42
的确是十进制的42
,八进制的42
,十六进制的52
和{ {1}}的二进制格式。