要将一些数字打印为二进制格式,我们只需使用该.format()方法,如下所示:# Binaryfor i in range(5+1): print("{0:>2} in binary is {0:>08b}".format(i))0 in binary is 000000001 in binary is 000000012 in binary is 000000103 in binary is 000000114 in binary is 000001005 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
2 回答
心有法竹
TA贡献1866条经验 获得超5个赞
这是我的看法:
在旧.format()
的 0 表示传递给格式函数的第一个元素。"{0:>2} in binary is {0:>08b}".format(i)
. 0 被使用两次来访问第一个变量两次。另一种写法是:"{:>2} in binary is {:>08b}".format(i,i)
省略索引。
在新f''
格式中,我们改为传递变量/表达式。
牛魔王的故事
TA贡献1830条经验 获得超3个赞
你的 f-string 应该有表达式而不是索引:
f'{i:>2} in binary is {i:>08b}'
0
原始格式字符串中的任何地方都应替换为实际的第一个参数:在本例中为i
.
警告
f 字符串中的表达式被计算两次,但是format
当您通过索引访问它时,参数 to只被计算一次。这对于更复杂的表达式很重要。例如:
"{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
被评估了多次,但这只是一个简单的参考。
添加回答
举报
0/150
提交
取消