[英]How to format a string using variables instead of numbers within curly braces?
[英]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-string 應該有表達式而不是索引:
f'{i:>2} in binary is {i:>08b}'
原始格式字符串中有0
任何地方都應替換為實際的第一個參數:在本例中為i
。
警告
f-string 中的表達式被計算兩次,但是當您通過索引訪問它時, 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 表示傳遞給 format 函數的第一個元素。 "{0:>2} in binary is {0:>08b}".format(i)
。 0 被使用兩次來訪問第一個變量兩次。 另一種寫法是: "{:>2} in binary is {:>08b}".format(i,i)
省略索引。
在新的f''
格式中,我們改為傳遞變量/表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.