Shi*_*_90 2 python binary python-3.x f-string
要将某些数字打印为二进制格式,我们只需使用.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
Run Code Online (Sandbox Code Playgroud)
对于其他格式(十六进制和八进制)的打印也是如此,只需要将后者的花括号替换为我们要打印的数字即可。但是,有没有办法使用新f""字符串替换.format()命令?我知道这看似微不足道,但我在试用新功能时不胜其烦,此外还f""使代码更短,更易读。
for i in range(5+1):
print(f'{0:>2} in binary is {0:>08b}')
# This prints out just 0s
Run Code Online (Sandbox Code Playgroud)
您的f字符串中应该包含表达式而不是索引:
f'{i:>2} in binary is {i:>08b}'
Run Code Online (Sandbox Code Playgroud)
0原始格式字符串中的任何地方都应替换为实际的第一个参数:在这种情况下i。
警告
f字符串中的表达式被求值两次,但是format当您通过索引访问它时,to的参数仅被求值一次。这对于更复杂的表达式很重要。例如:
"{0:>2} in binary is {0:>08b}".format(i + 10)
Run Code Online (Sandbox Code Playgroud)
在此,添加i + 10仅发生一次。另一方面
f"{i+10:>2} in binary is {i+10:>08b}"
Run Code Online (Sandbox Code Playgroud)
进行两次加法,因为它等效于
"{:>2} in binary is {:>08b}".format(i + 10, i + 10)
Run Code Online (Sandbox Code Playgroud)
要么
"{0:>2} in binary is {1:>08b}".format(i + 10, i + 10)
Run Code Online (Sandbox Code Playgroud)
解决方法是预先计算多次出现在f字符串中的表达式的结果:
j = i + 10
f"{j:>2} in binary is {j:>08b}"
Run Code Online (Sandbox Code Playgroud)
现在j经过多次评估,但这只是一个简单的参考。
| 归档时间: |
|
| 查看次数: |
1078 次 |
| 最近记录: |