Python字符串拼接之 f-string 詳解

一竣稽、字符串拼接方法

1. +

str1 = 'a'
str2 = 'b'
print(str1 + str2)

輸出:

ab

2. ,

str1 = 'a'
str2 = 'b'
print(str1, str2)

輸出:

a b

注:這個有空格越驻,, 方法只能用于 print 函數(shù)肴茄。

3. %

str1 = 'a'
str2 = 'b'
print('%s%s' % (str1, str2))

輸出:

ab

4. *

str1 = 'a'
print(str1 * 3)

輸出:

aaa

5. str.format()

str1 = 'a'
str2 = 'b'
print('{}{}'.format(str1, str2))

輸出:

ab

注:Python 2.6 中出現(xiàn)拣技。

6. join

str1 = 'a'
str2 = 'b'
print('-'.join([str1, str2]))

輸出:

a-b

注: str1 和 str2 拼接在 - 左右。

7. f-string

str1 = 'a'
str2 = 'b'
str = f'this is str1: {str1}, this is str2: {str2}.'
print(str)

輸出:

this is str1: a, this is str2: b.

二仙粱、f-string 詳解

f-string 是 Python 3.6 之后加入標(biāo)準(zhǔn)庫的。PEP 498 中有詳細(xì)介紹彻舰。其中有這樣一段話:

F-strings provide a way to embed expressions inside string literals, using a minimal syntax. It should be noted that an f-string is really an expression evaluated at run time, not a constant value. In Python source code, an f-string is a literal string, prefixed with 'f', which contains expressions inside braces. The expressions are replaced with their values.

說明 f-string 比 %-formattingstr.format() 都快伐割。因為 f-string 是運行時渲染的表達(dá)式,而不是常量值刃唤。

1. 簡單用法

name = "Eric"
age = 74
res = f"Hello, {name}. You are {age}."
print(res)

輸出:

Hello, Eric. You are 74.

2. 表達(dá)式

res = f"{2 * 37}"
print(res)

輸出:

74

3. 函數(shù)

res = f"{name.lower()} is funny."
print(res)

輸出:

eric is funny.

4. 多行 f-string

profession = "comedian"
affiliation = "Monty Python"
message = (f"Hi {name}. "
        "You are a {profession}. "
        "You were in {affiliation}.")
print(message)

輸出:

Hi Eric. You are a {profession}. You were in {affiliation}.

這時候需要使用 """

message = f"""
    Hi {name}. 
    You are a {profession}. 
    You were in {affiliation}.
 """
print(message)

輸出:

Hi Eric. 
You are a comedian. 
You were in Monty Python.

5. 引號

確保在表達(dá)式中使用的 f-string 外部沒有使用相同類型的引號即可隔心。

簡單來說就是,外部使用了 ""尚胞,內(nèi)部只能使用 ''硬霍。另外,如果外部使用了一個 ''笼裳,會發(fā)現(xiàn)內(nèi)部多行的話需要單獨寫換行符號 \唯卖,例如:

main_sql = f'select role, \
        day \
    from xxx'
print(main_sql)

不寫 \ 會報錯:

SyntaxError: EOL while scanning string literal

因此一個比較好的方法是外部使用 """,這樣內(nèi)部引號 '' 不需要轉(zhuǎn)義躬柬,而且多行也不需要寫換行符號拜轨。

main_sql = f"""select role,
        day
    from xxx"""
print(main_sql)

輸出:

select role,
        day
    from xxx

6. 字典

如果要為字典的鍵使用單引號,請記住確保對包含鍵的 f-string 使用雙引號允青。

comedian = {'name': 'Eric Idle', 'age': 74}
res = f"The comedian is {comedian['name']}, aged {comedian['age']}."
print(res)

輸出:

The comedian is Eric Idle, aged 74.

所以最好外部引號直接用 """橄碾,就不用擔(dān)心那么多問題了。

7. 大括號

為了使字符串出現(xiàn)大括號昧廷,必須使用雙大括號:

res = f"{{74}}"
print(res)

輸出:

{74}

8. 轉(zhuǎn)義

可以在 f-string 的字符串部分使用反斜杠轉(zhuǎn)義符堪嫂。但是,不能使用反斜杠在 f-string 的表達(dá)式部分中進(jìn)行轉(zhuǎn)義:

res = f"{\"Eric Idle\"}"
print(res)

報錯:

SyntaxError: f-string expression part cannot include a backslash

下面這種是可以的:

res = f"The \"comedian\" is {name}, aged {age}."
print(res)

輸出:

The "comedian" is Eric, aged 74.

9. lambda表達(dá)式

如果 !, :} 不在括號木柬,大括號或字符串中皆串,則它將被解釋為表達(dá)式的結(jié)尾。由于lambda使用 眉枕,這可能會導(dǎo)致一些問題:

res = f"{lambda x: x * 37 (2)}"
print(res)

報錯:

SyntaxError: unexpected EOF while parsing

下面這種是可以的:

res = f"{(lambda x: x * 37) (2)}"
print(res)

輸出:

74

三恶复、總結(jié)

- 適合少量短的字符串拼接怜森。

f-string 適合大量字符串拼接,而且在變量比較多的情況下可讀性較高谤牡。

四副硅、參考

PEP 498 -- Literal String Interpolation

python3 f-string格式化字符串的高級用法

可能是最全面的 python 字符串拼接總結(jié)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市翅萤,隨后出現(xiàn)的幾起案子恐疲,更是在濱河造成了極大的恐慌,老刑警劉巖套么,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件培己,死亡現(xiàn)場離奇詭異,居然都是意外死亡胚泌,警方通過查閱死者的電腦和手機省咨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玷室,“玉大人零蓉,你說我怎么就攤上這事∏铉停” “怎么了敌蜂?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绅项。 經(jīng)常有香客問我紊册,道長,這世上最難降的妖魔是什么快耿? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任囊陡,我火速辦了婚禮,結(jié)果婚禮上掀亥,老公的妹妹穿的比我還像新娘撞反。我一直安慰自己,他們只是感情好搪花,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布遏片。 她就那樣靜靜地躺著,像睡著了一般撮竿。 火紅的嫁衣襯著肌膚如雪吮便。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天幢踏,我揣著相機與錄音髓需,去河邊找鬼。 笑死房蝉,一個胖子當(dāng)著我的面吹牛僚匆,可吹牛的內(nèi)容都是我干的微渠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼咧擂,長吁一口氣:“原來是場噩夢啊……” “哼逞盆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起松申,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤云芦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后攻臀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焕数,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年刨啸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片识脆。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡设联,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灼捂,到底是詐尸還是另有隱情离例,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布悉稠,位于F島的核電站宫蛆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏的猛。R本人自食惡果不足惜耀盗,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卦尊。 院中可真熱鬧叛拷,春花似錦、人聲如沸岂却。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躏哩。三九已至署浩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扫尺,已是汗流浹背筋栋。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留器联,地道東北人二汛。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓婿崭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肴颊。 傳聞我的和親對象是個殘疾皇子氓栈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容