簡體   English   中英

如何使用 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-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM