格式化字符串,讓你的字符串變好看

前言

格式化字符串也是日常中不起眼卻也是有很有用的一個功能。按字面意思來說,格式化字符串,就是將字符串按照一定的格式輸出,以此“美化”字符串。

小試牛刀

之前在工作中就遇到這樣的案例,需要將數字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,後面的花括號中直接就可以傳入變量。

今天的分享就到這了,我們下期再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章