2025年10月25日 星期六

Python 學習筆記 : f 字串跳行串接的方法

Python 自 3.6 版開始支援 f 字串, 可以在字串中直接嵌入變數與運算式, 比原本的 format() 方法要直覺簡潔, 但是如果 f 字串很長須換行時要如何串接? 最簡單的方法就是用 + 串接, 但須在最後面加上換行串接符號 \, 例如 :

>>> name='Tony'   
>>> age=18  
>>> text=f'我名叫 {name}' +\
     f'今年 {age} 歲'
>>> text  
'我名叫 Tony今年 18 歲'

注意, 串接符號 \ 後面必須直接 enter 跳行, 不可有空白字元. 

第二個方法更簡單, 直接將要串接的 f 字串用小括符包起來, 不用 + 串接 (用也無妨, 但多此一舉), 更不用加上換行串接符號 \, 例如 :

>>> text=(f'我名叫 {name}'
     f'今年 {age} 歲')
>>> text  
'我名叫 Tony今年 18 歲'

事實上, 小括號在 Python 語法中有三大主要用途 : 
  1. 用來表示 Tuple (元組) :
    元組是以逗號隔開的序列, 例如 x = (1, 2, 3)
  2. 敘述的分組 (Expression grouping) :
    用來改變運算順序 (括號內優先運算), 例如 x = (a + b) * c
  3. 字串或程式多行接續 (Multi-line literal continuation) : 
    讓多行字串或程式碼自動連接起來, 例如 text=(f"你好 " f"{name}")
注意, tuple 與 grouping 的差別關鍵在於有沒有逗號, 序列有逗號隔開才是 tuple, 例如 :

a=(1)      # 這不是 tuple 而是單一元素的分組, 等同於 a=1
a=(1,)     # 這是含一個元素的 tuple

小括號的字串多行接續語法是 Python 的編譯期自動拼接 (compile-time concatenation), 不限於 f 字串, 任何 Python 字串 (一般字串, f-string, r-string, b-string) 都可以用, 只要是字面字串 (literal string), 中間沒有 + 或 ,運算子都會自動串接.

注意喔, () 內的字串不須用 + 串接, 雖然用也不會錯, 結果也一樣, 但是兩者機制不同, 效能也有差別, 有用 + 會在執行時期做字串加法, 有運算開銷效能略低, 例如 :

>>> text=(f"你好 " + f"{name}")     # 須在執行期做字串加法運算, 效能較低
>>> text   
'你好 Tony'

沒有用 + 是在編譯時期自動拼接, 效率較高 :

>>> text=(f"你好 " f"{name}")    # 編譯期拼接速度快
>>> text  
'你好 Tony'

所以用 () 串接字串時別畫蛇添足使用 + 串接. 

沒有留言 :