欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中str.format()詳解

 更新時間:2017年03月12日 14:52:57   作者:Wray  
本文主要給大家詳細介紹的是python編程中str.format()的基本語法和高級用法,非常的詳細,并附有示例,希望大家能夠喜歡

1. str.format 的引入

在 Python 中,我們可以使用 + 來連接字符串,在簡單情況下這種方式能夠很好的工作。但是當我們需要進行復雜的字符串連接時,如果依然使用 + 來完成,不僅會使代碼變得晦澀難懂,還會讓代碼變得難以維護,此時這種方式就顯得力不從心了。

例如,我們想打印這樣一條記錄:

User:John has completed Action:payment at Time:13:30:00 

如果使用加號實現(xiàn),會是下面這種形式:

print "User:" + user_name + " has completed Action:" + \ 
      action_name + " at Time:" + current_time

如果以后回過頭來閱讀這段代碼,我們很難直觀看出它的輸出格式,且修改起來也相對麻煩。

我們可以換用 % 來實現(xiàn):

print "User:%s has completed Action:%s at Time:%s" % \ 
    (user_name, action_name, current_time)

這回代碼變得清晰簡潔多了。

不過,Python 為我們提供了另一種簡潔優(yōu)雅的實現(xiàn)方式,也是官方更加推薦的方式:使用 str.format() 來實現(xiàn)字符串的格式化:

print "User:{} has completed Action:{} at Time:{}".format( 
    user_name, action_name, current_time)

str.format 既能夠用于簡單的場景,也能夠勝任復雜的字符串替換,而無需繁瑣的字符串連接操作。Python 的內置類型 str 和 unicode 均支持使用 str.format() 來格式化字符串。

我們接下來就詳細地討論 str.format() 的具體用法。

2. str.format 基本語法

格式化字符串使用花括號 {} 來包圍替換字段,也就是待替換的字符串。而未被花括號包圍的字符會原封不動地出現(xiàn)在結果中。

2.1. 使用位置索引

以下兩種寫法是等價的:

"Hello, {} and {}!".format("John", "Mary")

"Hello, {0} and {1}!".format("John", "Mary")

花括號內部可以寫上目標字符串的索引,也可以省略。如果省略,則按 format 括號里的目標字符串順序依次替換。

2.2. 使用關鍵字索引

除了通過位置來指定目標字符串,我們還可以通過關鍵字來指定它。

例如:

"Hello, {boy} and {girl}!".format(boy="John", girl="Mary")


使用關鍵字索引的好處是,我們無需關心參數(shù)的位置,且字符串的最終結果能夠一目了然。在以后的代碼維護中,我們能夠快速地修改對應的參數(shù),而不用對照字符串挨個去尋找相應的參數(shù)。

注意:如果字符串本身含有花括號,則需要將其重復兩次來轉義。例如,字符串本身含有 {,為了讓 Python 知道這是一個普通字符,而不是用于包圍替換字段的花括號,我們只需將它改寫成 {{ 即可。

3. str.format 高級語法

str.format 非常強大,足以完成日常工作中遇到的格式化輸出。熟練掌握該方法,能夠為以后的字符串處理打好基礎,還能節(jié)省不少時間。

3.1. 訪問參數(shù)的屬性或元素

在使用 str.format 來格式化字符串時,我們通常將目標字符串作為參數(shù)傳遞給 format 方法。實際上,我們還可以在格式化字符串中訪問參數(shù)的某個屬性或某個元素:

"My car is {0.color}.".format(black_car)
"The first student is {student[0]}.".format(student=stu_list)
"John is {d[john]} years old.".format(d=age_dict)

3.2. 參數(shù)輸出轉換

參數(shù)的字符串輸出,默認是由其自身的 __format__ 方法來實現(xiàn)的。也就是說,Python 使用參數(shù)的 __format__ 輸出來取代替換字段。如果我們想調用 str() 或 repr() 來轉換參數(shù),可以通過添加 轉換標志 來實現(xiàn):

# call str() on argument
"It's a {0!s}."

#call repr() on argument
"We can get info from {name!r}."

4. str.format 一般形式

格式化字符串的一般形式如下:

"... {field_name!conversion:format_spec} ..."

從上面的代碼可以看到,格式化字符串可分為 field_name、conversion、format_spec 三部分,分別對應替換字段名稱(索引)、轉換標志、格式描述。其中,字段名稱是必選的,而后兩者是可選的。轉換標志緊跟在英文感嘆號后面,而格式描述緊跟在英文冒號后面。

前面已經提到過,字段名稱既可是位置索引,也可是關鍵字索引。字段名稱后面可以通過點來訪問屬性,或通過方括號來訪問元素。

在這里,我們重點看一下格式描述(format_spec)這一項。

格式描述中含有6個選項,分別是 fill、align、sign、width、precision、type。 它們的位置關系如下:

[[fill]align][sign][#][0][width][,][.precision][type]
fill
可以是任意字符,默認為空格。

align
僅當指定最小寬度時有效。

< 左對齊(默認選項)
> 右對齊
= 僅對數(shù)字有效;將填充字符放到符號與數(shù)字間,例如 +0001234
^ 居中對齊
sign
僅對數(shù)字有效

+ 所有數(shù)字均帶有符號
- 僅負數(shù)帶有符號(默認選項)
 即空格;正數(shù)前面帶空格,負數(shù)前面帶符號
'#'
只對整數(shù)有效

自動在二進制、八進制、十六進制數(shù)值前添加對應的 0b、0o、 0x。

','
自動在每三個數(shù)字之間添加 , 分隔符。

width
十進制數(shù)字,定義最小寬度。如果未指定,則由內容的寬度來決定。

如果沒有指定對齊方式(align),那么可以在 width 前面添加一個0來實現(xiàn)自動填充0,等價于 fill 設為 0 并且 align 設為 =。

precision
用于確定浮點數(shù)的精度,或字符串的最大長度。不可用于整型數(shù)值。

type
確定參數(shù)類型,默認為 s ,即字符串。

整數(shù)輸出類型:

b:以二進制格式輸出
c:將整數(shù)轉換成對應的 unicode 字符
d:以十進制輸出(默認選項)
o:以八進制輸出
x:以十六進制小寫輸出
X:以十六進制大寫輸出
n:與 d 相同,但使用當前環(huán)境的分隔符來分隔每3位數(shù)字

十進制浮點數(shù)輸出類型:

e:指數(shù)標記;使用科學計數(shù)法輸出,用e來表示指數(shù)部分,默認 precision 為6
E:與 e 相同,但使用大寫 E 來表示指數(shù)部分
f:以定點形式輸出數(shù)值,默認 precision 為6
F:與 f 相同
g:通用格式;對于給定的 precision p >= 1,取數(shù)值的p位有效數(shù)字,并以定點或科學計數(shù)法輸出(默認選項)
G:通用格式;與 g 相同,當數(shù)值過大時使用 E 來表示指數(shù)部分
n:與 g 相同,但使用當前環(huán)境的分隔符來分隔每3位數(shù)字
%:百分比標記;使用百分比的形式輸出數(shù)值,同時設定 f 標記

相關文章

最新評論