Python學習入門教程(20)—格式化輸出「帶格式的字符串字面值」

(本號正在連續推出以Python官網文檔為主線的完整的系統學習Python的系列文章和視頻,感興趣的朋友們歡迎搜索關注。在這裡學習Python事半功倍!本文及後續文章如無特別聲明均以Windows平臺作為演示平臺,Python版本為:3.8.1)


帶格式的字符串字面值

帶格式的字符串字面值或f-string是前綴為“f”或“f”的字符串字面值。這些字符串可能包含替換字段,替換字段是用大括號{}分隔的表達式。儘管其他普通的字符串字面值總是常量值,但帶格式的字符串字面值實際上是在運行時計算的表達式。帶格式的字符串字面值的內容應遵循如下語法:

<code>f_string          ::=  (literal_char | "{{" | "}}" | replacement_field)*
replacement_field ::= "{" f_expression ["!" conversion] [":" format_spec] "}"
f_expression ::= (conditional_expression | "*" or_expr)
("," conditional_expression | "," "*" or_expr)* [","]
| yield_expression
conversion ::= "s" | "r" | "a"
format_spec ::= (literal_char | NULL | replacement_field)*
literal_char ::= /<code>

對上述語法說明如下:

  • 解析帶格式的字符串字面值時,除雙花括號“{{”或“}}”將被替換為相應的單花括號外,其餘任何在{}外的部分按字面意思處理。一個左花括號“{”標記一個替換字段,該字段以Python表達式開始。表達式後面可能有一個轉換字段,由感嘆號"!"引導。還可以附加格式說明符,由冒號":"引入。替換字段以右花括號"}"結束。
  • 替換字段可以包含換行符(例如用三引號括起來的字符串),但是不能包含註釋。每個字段在帶格式的字符串字面值出現的上下文中按從左到右的順序求值。
  • 帶格式的字符串字面值中的表達式(f_expression)除不能為空外可以為任何Python表達式,並且當使用lambda和賦值表達式:=時必須顯式地用括號括起來。
  • 如果指定了轉換,則在格式化之前對錶達式的求值結果進行轉換。轉換!s對結果調用str() ,!r調用repr(),!a調用ascii()。然後使用format()對結果進行格式化。格式說明符將被被傳遞給表達式或轉換結果的_format__()方法。當省略格式說明符時,將傳遞一個空字符串。格式化操作之後的結果包含了整個帶格式的字符串字面值的最終求值結果。
  • 頂級格式說明符可能包括嵌套的替換字段。這些嵌套字段可能包括它們自己的轉換字段和格式說明符,但不可以包括更深嵌套的替換字段。
  • 可以連接帶格式的字符串字面值,但是不能將替換字段分割在不同字面值中。
  • 替換字段中使用的引號不能與其所在的外層字符串使用的引號發生衝突。
  • 反斜槓不允許在表達式中使用,若使用將引發錯誤。若需要包含反斜槓,可使用內置函數ord()為其創建一個臨時變量,再引用該變量。
  • 帶格式的字符串不能用作文檔字符串,即使它們不包括表達式也不行。

當格式說明符format_spec用於指定輸出格式時是有更具體的定義的:

<code>format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::=
align ::= "" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
/<code>

其中:

  • align 指定對齊方式。:右對齊左填充,=:應用於數值,在符號與數值之間填充,^:居中
  • fill 用於指定對齊時使用的填充符,可以設定為任何字符,默認為空格。
  • sign 用於指定符號位。+:不論正負都顯示符號,-:只顯示負數的符號,空格:正數前置空格,負數則顯示符號。
  • # 只用於數值指定輸出格式(進制)
  • width 用於指定輸出的最小字符數,若實際輸出大於此值則按實際輸出。
  • grouping_option 用於指定數值按千分隔符。
  • precision指示使用“f”和“F”格式化的浮點值的小數點後應顯示多少位數字,或使用“g”或“G”格式化的浮點值的小數點前後應顯示多少位數字。對於非數字類型表示從字段內容中將使用多少字符。精度對於整數值是不允許的。
  • type 指定使用哪種數據類型輸出數據。b:二進制,c:字符型,d:十進制,e和E:指數,f和F:浮點型,g和G:通用型,n:數值型,o:八進制,s:字符串,x和X:16進制,%:百分數。

示例如下:

Python學習入門教程(20)—格式化輸出「帶格式的字符串字面值」

【示例】帶格式的字符串字面值

關於使用格式說明符輸出的更多示例將在下一篇"Python學習入門教程(21)—格式化輸出「使用str.format()」"中列舉

【結束】


分享到:


相關文章: