在程序設計中,對於字符串的處理是個免不了的工作。對於字符串的常見操作,Python內置了各種不同的工具,本篇要討論的是關於Python中字串格式化輸出的各種語法。
在Python中最早的方式是使用符號%
來設定格式化字符串。例如下面的方式:
person = 'Sean'
print("My name is %s" %person)
舊式的語法使用%
符號來告訴Python編譯器此處需要替換成字符串。並且到下一個%
符號處找到變量person,並且將變量person的值帶入第一個%
符號中。
大家可以發現第一個%
符號後面跟著一個s字母。這個字母代表的是字符串類型。下面列出其他可以轉換的類型:
這裡的新舊式語法的區分,是以Python 3
作為劃分的時間點。Python 3中引進了這種新式的語法。新式語法丟掉了原先的%
符號,改用format()
方法在字串中插入變量,使用時需要搭配花括號進行標識。
比如說有一個字串My name is xxx.
並且希望將變量person的值插入字符串,替換裡面的xxx
,我們可以使用下面的方式表示:
person = 'Sean'
print("My name is {}".format(person))
可以看到花括號{ }
取代了xxx
,而.format(person)
可以將person
變量的值插入到花括號中。
在舊式的語法中我們需要依照字串中的%
符號所在的順序依次來輸出不同類型變量的值,但是在新的語法中則無此限制,我們可以指定順序。如下所示:
a = 'Sean'
b = 'John'
c = 'Luis'
print("{},{} and {} are my friends.".format(a, b, c))
上述代碼使用的是位置參數。其中花括號{ }
的順序代表的是.format()
方法中參數值的順序。第一個為a、第二個為b,依此類推。同時,我們可以利用編號參數來設定替換字段,進而用以改變順序,如下:
a = 'Sean'
b = 'John'
c = 'Luis'
print("{2},{1} and {0} are my friends.".format(a, c, b))
# John,Luis and Sean are my friends.
整體來說,使用format()
格式化字符串的語法比舊式的語法強大,使用起來相當方便,Python3也推薦大家使用這個方式。
然而這種格式化方式也不是沒有缺點。比如說,當format()
需要處理多個參數或者是更長的字符串時,整個代碼會顯得過於冗長。如下是一個簡單的例子:
first_name = 'John'
last_name='Snow'
city = 'Winterfell'
print("Hi, My name is {} {}. I am from {} ".format(first_name, last_name,city ))
因此,Python 3.6對此做了一些改變。
從Python 3.6之後,開始使用f-strings
作為字串格式化的方式。f-strings
又稱為·string interpolation·。
例如,上面的代碼可以改用f-strings
表示如下:
person = 'Sean'
print(f"My name is {person}")
# My name is Sean
f-String
在使用上較format()
簡便,其開頭是f
,接著花括號{ }
裡面放入參數名稱,整個輸出字符串則使用雙引號“ ”
標識。
這種新的作法讓我們得以把Python表達式直接嵌入在字串中。你可以嵌入各種表達式,比如直接從字符串裡面計算結果。
x =10
y = 3
print(f" {x} 加 {y} 等於 {x+y} ")
# 10 加 3 等於 13
Python編譯器會把f-string
轉換成一連串的字符串和表達式,進而組合成為最終的字符串輸出。
字符串格式化輸出可以增加程序的可讀性,也可以降低程序的出錯機率,提高維護的便利性。
最後,如果大家在開發中使用的是Python3.6以前的版本,建議使用.format()
進行字串的格式化;如果是Python3.6以後的版本,則建議可以使用f-string
語法。
您學廢了嘛?