要將一些數字打印為二進制格式,我們只需使用該.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
提交
取消