Python字符串格式化语法求助:多进制对齐输出相关疑问
多进制对齐输出的Python字符串格式化详解
先贴出原代码及对应输出:
number = 10 for i in range(1, number+1): print("{0:{w}d} {0:{w}o} {0:{w}X} {0:{w}b}".format(i, w=len("{0:b}".format(number))))
输出:
1 1 1 1 2 2 2 10 3 3 3 11 4 4 4 100 5 5 5 101 6 6 6 110 7 7 7 111 8 10 8 1000 9 11 9 1001 10 12 A 1010
下面逐个解答你的疑问:
1. 空格的来源
你测试的"{0:6b}".format(8)输出 1000,空格数量确实是指定宽度 - 转换后字符串长度,这是Python格式化字符串的宽度填充机制:
- 当格式写为
{占位符:宽度格式符}(比如{0:6b})时,6代表输出字符串的总宽度。 - 如果转换后的字符串长度小于指定宽度,默认会用空格在左侧填充,直到达到指定宽度,实现右对齐效果。
- 原代码中
w=len("{0:b}".format(number))是先计算number(此处为10)的二进制字符串长度(1010共4位),所以w=4,每个进制的输出都会按4位宽度填充,不足补空格,最终实现列对齐。
2. d、o、X、b格式符的作用
这些是Python整数格式化的类型指定符,用于将整数转换为对应进制的字符串:
d:十进制(decimal),直接输出整数的十进制字符串形式o:八进制(octal),将整数转为无前缀的八进制字符串(例如8转为10)X:十六进制(hexadecimal),转为大写无前缀十六进制字符串(例如10转为A)b:二进制(binary),转为无前缀的二进制字符串(例如10转为1010)
3. {0:}的作用
{0}是格式化字符串中的位置占位符,0表示引用format()方法里的第0个参数(即后面的i)。{0:}里的:是占位符和格式规则的分隔符,后面跟随宽度、类型等格式参数(比如{0:{w}d}里的{w}d就是格式规则:宽度用变量w,类型为十进制)。
简单说,{0:}就是告诉Python:“这里要使用format方法中第0个参数,后面跟着具体的格式要求”。
4. format方法中的参数i的作用
format(i, w=...)里的i是被格式化的数据源,也就是循环中当前迭代的整数。所有{0:...}占位符都会引用这个i,将其转换为不同进制的字符串,再应用宽度填充规则。
比如循环到i=8时,{0:{w}d}会把8转为十进制字符串"8",按4位宽度填充成" 8";{0:{w}o}转为八进制"10",填充成" 10",以此类推,最终输出对齐的列。
内容的提问来源于stack exchange,提问作者Alasdair Pirie
相关产品推荐
相关产品推荐

