字串格式化

2021-10-14 15:23:15 字數 2719 閱讀 6516

字串方法 str.format_map(),python 官方文件描述如下:

help

(str

.format_map)

help on method_descriptor:

format_map(...)

the substitutions are identified by braces ('').

# 建立乙個字典子型別,當 鍵值對 不存在時,返回鍵

class

default

(dict):

def__missing__

(self, key)

:return key

d = default(a=1)

d['a'

], d[

'b']

(1, 'b')
# country 鍵值對不存在,所以直接格式化鍵 『country』

' was born in '

.format_map(

default(name=

'guido'

))

'guido was born in country'
與 format 格式化對比:

' is '

.format_map(

)

'a is 18'
' is '

.format(**

)

'a is 18'
f-string 即格式化字串字面值。字串以 『f』 或 『f』 為字首。這種字串可包含替換字段,即以 {} 標示的表示式。格式化字串字面值,會在執行時將表示式求值,而其他字串字面值總是乙個常量。

格式化字串字面值中的表示式會被當作包含在圓括號中的普通 python 表示式一樣處理,但有少數例外。

空表示式不被允許,lambda 和賦值表示式 :=(python 3.8版新增)必須顯式地加上圓括號。

f''

# python 3.8 才能執行

'2'
f''
'at 0x000001d70b06ca60>'
替換表示式可以包含換行(例如在三重引號字串中),但是不能包含注釋。

a =

3; b =

2f'''3+2\

-5='''

'3+2-5=\n0'
每個表示式會在格式化字串字面值所包含的位置按照從左至右的順序被求值。

f''
'false'
可以在表示式後加乙個等於號 『=』(3.8 新版功能),提供了等於號 『=』 的時候,輸出將包含 『=』、』=』 前後的空格以及求值結果。預設情況下,』=』 會導致表示式的 repr() 被使用,除非專門指定了格式。

foo =

"bar"

f""

" foo = 'bar'"
可以帶乙個以嘆號 『!』 標示的轉換字段,轉換符 『!s』 即對結果呼叫 str(),』!r』 為呼叫 repr(),而 『!a』 為呼叫 ascii()。

foo =

"bar"

f""

'foo = bar'
還可帶乙個以冒號 『:』 標示的格式說明符,「格式化迷你語言」 與 str.format() 方法所使用的微語言一致,詳見 str.format 方法。

foo =

3.14

f""

'3.1400'
f''
'0o173'
a=5/

6f''

'83.33%'
格式表示式中不允許有反斜槓,這會引發錯誤:

f"newline: "
file "", line 1

f"newline: "

^syntaxerror: f-string expression part cannot include a backslash

想包含需要用反斜槓轉義的值,可以建立乙個臨時變數:

newline =

ord(

'\n'

)f"newline: "

'newline: 10'
格式化字串字面值不可用作文件字串,即便其中沒有包含表示式:

def

foo():

f"not a docstring"

print

(foo.__doc__)

none

字串格式化

sprintf snprintf snprintf std stringstream std strstream boost lexical cast boost format cstring format 1 sprintf 使用 sprintf 不安全,輕則破壞資料的準確性,重則程式崩潰。請看下...

格式化字串

通常在使用字串的時候,會對字串進行格式化,然後輸出或呼叫 一般我們使用替換標記對字串進行格式化 string str1 string.format add is 1,2,3 而且在c 中的替換標記可以以任意順序和次數出現在格式化字串中,但替換值是按順序排的,而且替換標記不能超出索引範圍 string...

字串格式化

例如 string s hello map.put target world string res format s,map 有什麼用呢?比如在some.properties中配置模板字串,但是如果用 這種方式,在配置了spring讀取properties注入變數的時候,這個變數就找不到會報錯。這個...