如何使用 f"" 字符串而不是 .format() 打印二进制数?
How to print binary numbers using f"" string instead of .format()?
为了将一些数字打印成二进制格式,我们只需使用 .format()
方法,如下所示:
# Binary
for i in range(5+1):
print("{0:>2} in binary is {0:>08b}".format(i))
0 in binary is 00000000
1 in binary is 00000001
2 in binary is 00000010
3 in binary is 00000011
4 in binary is 00000100
5 in binary is 00000101
其他格式(十六进制和八进制)的打印也类似,只需要将后面的大括号替换为我们要打印的数字即可。但是有没有办法用新的 f""
字符串来代替 .format()
命令呢?我知道这可能看起来微不足道,但我在尝试新功能时遇到了这个问题,此外 f""
使代码更短且更易读。
for i in range(5+1):
print(f'{0:>2} in binary is {0:>08b}')
# This prints out just 0s
你的 f 字符串应该包含表达式而不是索引:
f'{i:>2} in binary is {i:>08b}'
原始格式字符串中任何有 0
的地方都应替换为实际的第一个参数:在本例中为 i
.
警告
f 字符串中的表达式被求值两次,但是 format
的参数在您通过索引访问它时只被求值一次。这对于更复杂的表达式很重要。例如:
"{0:>2} in binary is {0:>08b}".format(i + 10)
这里加法i + 10
只发生一次。另一方面
f"{i+10:>2} in binary is {i+10:>08b}"
加法两次因为它等价于
"{:>2} in binary is {:>08b}".format(i + 10, i + 10)
或
"{0:>2} in binary is {1:>08b}".format(i + 10, i + 10)
解决方法是预先计算出现在您的 f 字符串中不止一次的表达式的结果:
j = i + 10
f"{j:>2} in binary is {j:>08b}"
现在j
被多次求值,但只是简单的参考。
这是我的看法:
在旧的 .format()
中,0 表示传递给格式函数的第一个元素。 "{0:>2} in binary is {0:>08b}".format(i)
。两次使用 0 两次访问第一个变量。另一种写法是:"{:>2} in binary is {:>08b}".format(i,i)
省略索引。
在新的 f''
格式中,我们传递 variables/expressions。
为了将一些数字打印成二进制格式,我们只需使用 .format()
方法,如下所示:
# Binary
for i in range(5+1):
print("{0:>2} in binary is {0:>08b}".format(i))
0 in binary is 00000000
1 in binary is 00000001
2 in binary is 00000010
3 in binary is 00000011
4 in binary is 00000100
5 in binary is 00000101
其他格式(十六进制和八进制)的打印也类似,只需要将后面的大括号替换为我们要打印的数字即可。但是有没有办法用新的 f""
字符串来代替 .format()
命令呢?我知道这可能看起来微不足道,但我在尝试新功能时遇到了这个问题,此外 f""
使代码更短且更易读。
for i in range(5+1):
print(f'{0:>2} in binary is {0:>08b}')
# This prints out just 0s
你的 f 字符串应该包含表达式而不是索引:
f'{i:>2} in binary is {i:>08b}'
原始格式字符串中任何有 0
的地方都应替换为实际的第一个参数:在本例中为 i
.
警告
f 字符串中的表达式被求值两次,但是 format
的参数在您通过索引访问它时只被求值一次。这对于更复杂的表达式很重要。例如:
"{0:>2} in binary is {0:>08b}".format(i + 10)
这里加法i + 10
只发生一次。另一方面
f"{i+10:>2} in binary is {i+10:>08b}"
加法两次因为它等价于
"{:>2} in binary is {:>08b}".format(i + 10, i + 10)
或
"{0:>2} in binary is {1:>08b}".format(i + 10, i + 10)
解决方法是预先计算出现在您的 f 字符串中不止一次的表达式的结果:
j = i + 10
f"{j:>2} in binary is {j:>08b}"
现在j
被多次求值,但只是简单的参考。
这是我的看法:
在旧的 .format()
中,0 表示传递给格式函数的第一个元素。 "{0:>2} in binary is {0:>08b}".format(i)
。两次使用 0 两次访问第一个变量。另一种写法是:"{:>2} in binary is {:>08b}".format(i,i)
省略索引。
在新的 f''
格式中,我们传递 variables/expressions。