前言
格式化字符串也是日常中不起眼卻也是有很有用的一個功能。按字面意思來說,格式化字符串,就是將字符串按照一定的格式輸出,以此“美化”字符串。
小試牛刀
之前在工作中就遇到這樣的案例,需要將數字1-100,編碼爲001-100。
001
003
023
098
100
其實這裏就是有一個規律,就是這些數字都是佔了三位,前面用0補齊就行。
(1)但是在沒有學習字符串格式化前,我首先是這樣想的。判斷數字的大小,小於10前面就補兩個0,小於100就補一個0,通過字符串拼貼起來即可。
for i in range(1,101):
if i < 10:
print("00"+str(i))
elif i < 100:
print("0"+str(i))
else:
print(str(i))
但這種寫法很不好,如果我輸出的要到100000,那我就要寫很多次判斷,代碼就會很長,而且沒有擴展性。
(2)基於第一種方法的確定,進行了改進。通過計算數字的長度,因爲佔位是3位,用3減去數字的長度就是需要補0的個數。
for i in range(1,101):
print("0"*(3 - len(str(i))) + str(i))
這樣寫就可以解決第一種方法的缺點,代碼也很簡潔。
(3)但是學習完字符串格式化後,就發現python已經是給了我們方法,直接就可以按照一定的格式輸出。
for i in range(1,101):
print("{:03d}".format(i))
我先不解釋這個用法,我想通過下面詳細的講解,回過頭再看這個代碼,讀者就應該很清楚爲什麼這麼寫,以及自己也會寫帶有各種格式的字符串代碼了。
格式化字符串
首先,我想說的是,格式化字符串本身就有很多種寫法,今天只講最常用的三種方法。
- %字符
- format函數
- f-string
%字符
%字符寫法簡單,一些大佬都習慣用這個,他是一個在python2中就有的老古董,所以很多python老手已經習慣了這種方法。我們先看代碼舉個例子。
name = 'luopan'
age = 27
print('My name is %s.I am %d years old' %(name,age))
# My name is luopan.I am 27 years old
核心範式就是:
'%x %x' %(v1,v2)
引號內就是需要格式化的字符串,%x就是指定的格式,%s代表的是格式化字符串,%d格式化整數,%f格式化浮點數字。
format函數
Python2.6 開始,新增了一種格式化字符串的函數format(),它增強了字符串格式化的功能。這也是我常用的格式化字符串的方法。
name = 'luopan'
age = 27
print('My name is {}.I am {} years old'.format(name,age))
# My name is luopan.I am 27 years old
基本語法是通過 {} 來代替以前的 %。
核心範式就是:
'{} {}' .format(v1,v2)
由於format函數是我常用的格式化字符串方法,所以我這裏詳細介紹下format函數的用法。
首先,format函數接受無限個參數,也可以指定順序。
'{} {}'.format('hello','world')
# hello world
'{1} {0}'.format('hello','world') #指定順序
# world hello
當然,傳入字典和列表也是可以的。
info = {
'name':'luopan',
'age':27
}
print('name:{name},age:{age}'.format(**info))
# name:luopan,age:27
info = ['luopan',27]
print('name:{0[0]},age:{0[1]}'.format(info))
# name:luopan,age:27
講到這裏,我們只是學會了format函數的方法,還沒有將到怎麼去按指定格式格式化。接下來我們就來講解下吧。
(1)指定小數點位數
a = 1.34236
print('{:.3f}'.format(a))
# 1.342
: 號後面帶需要定義的格式。
(2)指定寬度
a = 3
print('{:x>4d}'.format(a))
# xxx3
這裏補x ,>代表左邊補x,4就代表寬度爲4。我想你看到這裏就應該明白前面的:03d是什麼意思了吧(寬度爲3,前面補0)。
當然還有其他很多格式,具體參考這篇文章(https://www.runoob.com/python/att-string-format.html)。
f-string
f-string方法更加簡潔,也是現在大家最推薦使用的方法,還是以上面的代碼爲例。
name = 'luopan'
age = 27
print(f'My name is {name}.I am {age} years old')
# My name is luopan.I am 27 years old
只需要在字符串前加上f,後面的花括號中直接就可以傳入變量。
今天的分享就到這了,我們下期再見!