<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Python】Python字符串格式化問題:%、format()與f-strings

          共 6395字,需瀏覽 13分鐘

           ·

          2021-07-18 17:00

          目   錄

          一、字符串格式化方法概覽

          二、format() 常用格式化

              1、通過位置

              2、通過關(guān)鍵字參數(shù)

              3、通過對象屬性

              4、通過下標(biāo)

              5、格式限定符

                  1)字符的填充與對齊

                  2)數(shù)字精度與類型f處理

                  3)進制轉(zhuǎn)換

                  4)千位分隔符

              6、列表字典拆分

          三、format() 底層語法


          一、字符串格式化方法概覽

          方法 1 --------  過去的格式化方法,代碼中還能經(jīng)常見到
          在 python 2.6 之前,利用 百分號 % 表示占位符,進行格式化

          name='小伍哥''Hello,%s'%nameHello,小伍哥

          方法 2 --------  現(xiàn)階段使用最多的方法

          Python2.6 引入,它通過 {}: 來代替%表示占位符,性能比 % 更強大,字符串的 format 方法

          name='小伍哥''Hello,{}'.format(name)'Hello,小伍哥'

          方法 3 -------- 推薦使用的方法

          為了進一步簡化格式化方法,Eric Smith 在2015年提交了 PEP 498 -- Literal String Interpolation 提案。Python 3.6 引入了新的字符串格式化方式 f-strings,字符串開頭加上一個字母 f ,與其它格式化方式相比,不僅簡潔明了,可讀性更好,更不容易出錯,而且運行效率也更高

          name='小伍哥'f'Hello,{name}''Hello,小伍哥'

           

          Python中常見的格式化的方法主要有三種,本文講解目前最常用的format格式化方式,后期講進行對比講解。


           

          二、format() 常用格式化

          1、通過位置

          '{0},{1}'.format('小伍哥',18)'小伍哥,18'
          '{},{}'.format('小伍哥',18)'小伍哥,18'
          '{1},{0},{1}'.format('小伍哥',18)'18,小伍哥,18'
          '{0}{1}{2}{3}{4}'.format('上','海','自','來','水')'上海自來水'
          '{0}{1}{2}{3}{4}{3}{2}{1}{0}'.format('上','海','自','來','水')'上海自來水來自海上'

          字符串的format函數(shù)可以接受不限個參數(shù),位置可以不按順序,可以不用或者用多次,不過2.6不能為空{(diào)},2.7才可以。foramt會把參數(shù)按位置順序來填充到字符串中,第一個參數(shù)是0,然后1……

          也可以不輸入數(shù)字,這樣也會按順序來填充同一個參數(shù)可以填充多次,這個是format比%先進的地方

           

          2、通過關(guān)鍵字參數(shù)

          '{name},{age}'.format(age=18,name='小伍哥')'小伍哥,18'

           

          3、通過對象屬性

          class Person:  def __init__(self,name,age):    self.name,self.age = name,age  def __str__(self):      return 'This guy is {self.name},is {self.age} old'.format(self=self)
          print(Person('小伍哥',18))This guy is 小伍哥,is 18 old
          c = 3-5jprint(('The complex number {0} is formed from the real part {0.real} and the imaginary part {0.imag}.').format(c))The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0

          4、通過下標(biāo)

          p=['小伍哥',18]'{0[0]},{0[1]}'.format(p)'小伍哥,18'
          coord = (3, 5)print('X: {0[0]}; Y: {0[1]}'.format(coord))X: 3; Y: 5

          有了這些便捷的“映射”方式,我們就有了偷懶利器。基本的python知識告訴我們,list和tuple可以通過“打散”成普通參數(shù)給函數(shù),而dict可以打散成關(guān)鍵字參數(shù)給函數(shù)(通過和*)。所以可以輕松的傳個list/tuple/dict給format函數(shù)。非常靈活。

           

          5、格式限定符

          它有著豐富的的“格式限定符”(語法是{} 中帶: 號)

          1)字符的填充與對齊

          填充常跟對齊一起使用

          ^ < >分別是居中、左對齊、右對齊,后面帶寬度

          : 號后面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充

          '{:>8}'.format('18')' 18''{:0>8}'.format('18')'00000018''{:*>8}'.format('18')'******18'

          注:字符串模塊內(nèi)置函數(shù)中也存在對齊的函數(shù) str.center(),str.ljust(),str.rjust(),str.zfill()

          'shuai'.center(10,'*')#居中對齊'**shuai***'
          'shuai'.ljust(10,'*')#左對齊'shuai*****'
          '18'.zfill(10)#右對齊'0000000018'

           

          2)數(shù)字精度與類型f處理

          精度常跟類型f一起使用

          '{:.2f}'.format(321.33345)'321.33'
          'π is {:.2f}'.format(3.1415926)π is 3.14
          'π is %.2f'% 3.1415926π is 3.14
          '{0:.4f}+{1:.4f}'.format(321.33345,325.33345)'321.3335+325.3335'
          "{:.2%}".format(0.00234)'0.23%'

          其中.2表示長度為2的精度,f表示float類型。

          數(shù)字

          格式

          輸出

          描述

          3.1415926

          {:.2f}

          3.14

          保留小數(shù)點后兩位

          3.1415926

          {:+.2f}

          +3.14

          帶符號保留小數(shù)點后兩位

          -1

          {:+.2f}

          -1.00

          帶符號保留小數(shù)點后兩位

          2.71828

          {:.0f}

          3

          不帶小數(shù)

          5

          {:0>2d}

          05

          數(shù)字補零 (填充左邊, 寬度為2)

          5

          {:x<4d}

          5xxx

          數(shù)字補x (填充右邊, 寬度為4)

          10

          {:x<4d}

          10xx

          數(shù)字補x (填充右邊, 寬度為4)

          1000000

          {:,}

          1,000,000

          以逗號分隔的數(shù)字格式

          0.25

          {:.2%}

          25.00%

          百分比格式

          1000000000

          {:.2e}

          1.00e+09

          指數(shù)記法

          13

          {:>10d}

                  13

          右對齊 (默認, 寬度為10)

          13

          {:<10d}

          13

          左對齊 (寬度為10)

          13

          {:^10d}

              13

          中間對齊 (寬度為10)

           

          3)進制轉(zhuǎn)換

          主要就是進制了,b、d、o、x分別是二進制、十進制、八進制、十六進制。

          '{:b}'.format(17)'10001''{:d}'.format(17)'17''{:o}'.format(17)'21''{:x}'.format(17)'11'

          • b: 輸出整數(shù)的二進制方式

          • c: 輸出整數(shù)對應(yīng)的 Unicode 字符;

          • d: 輸出整數(shù)的十進制方式;

          • o: 輸出整數(shù)的八進制方式;

          • x: 輸出整數(shù)的小寫十六進制方式;

          • X: 輸出整數(shù)的大寫十六進制方式;

           

          數(shù)字

          格式

          輸出

          描述

          11

          '{:b}'.format(11)

          1011

          進制轉(zhuǎn)換

          11

          '{:d}'.format(11)

          11

          進制轉(zhuǎn)換

          11

          '{:o}'.format(11)

          13

          進制轉(zhuǎn)換

          11

          '{:x}'.format(11)

          b

          進制轉(zhuǎn)換

          11

          '{:#x}'.format(11)

          0xb

          進制轉(zhuǎn)換

          11

          '{:#X}'.format(11)

          0XB

          進制轉(zhuǎn)換

           

          4)千位分隔符

          用,號還能用來做金額的千位分隔符。

          '{:,}'.format(1234567890)'1,234,567,890'

           

          6、列表字典拆分

          在format格式化時,可使用* 或者 ** 進行對list、tuple拆分。

          foods = ['fish', 'beef', 'fruit']s = 'i like eat {} and {} and {}'.format(*foods)# i like eat fish and beef and fruitprint(s)
          foods = ['fish', 'beef', 'fruit']s = 'i like eat {2} and {0} and {1}'.format(*foods)# i like eat fruit and fish and beefprint(s)dict_temp = {'name': 'Lily', 'age': 18}
          字典需要用 ** 進行拆分
          s = 'My name is {name}, i am {age} years old'.format(**dict_temp)print(s) # My name 
          kwargs = {'name': 'egon', 'age': 18}print('我的名字是 {name}, 我的年齡是 {age}.'.format(**kwargs)) # 使用**進行解包


          三、format() 底層語法

          上面講解了常見的用戶,該函數(shù)的通用的底層其實非常復(fù)雜和通用的,有非常多的參數(shù),且都是可選參數(shù),導(dǎo)致學(xué)習(xí)起來非常困難,有興趣的可以仔細研究,format() 方法的語法格式如下:
          str.format(args)
          str    : 用于指定字符串的顯示樣式
          args: 用于指定要進行格式轉(zhuǎn)換的項,如果有多項,之間有逗號進行分割
          學(xué)習(xí) format() 方法的難點,在于搞清楚 str 顯示樣式的書寫格式。在創(chuàng)建顯示樣式模板時,需要使用 {} : 來指定占位符,其完整的語法格式為:

          { [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ] }

          格式中用 [] 括起來的參數(shù)都是可選參數(shù),即可以使用,也可以不使用。
          各個參數(shù)的含義如下:
          index:指定:后邊設(shè)置的格式要作用到 args 中第幾個數(shù)據(jù),數(shù)據(jù)的索引值從 0 開始。如果省略此選項,則會根據(jù) args 中數(shù)據(jù)的先后順序自動分配。
          fill:指定空白處填充的字符。注意,當(dāng)填充字符為逗號(,)且作用于整數(shù)或浮點數(shù)時,該整數(shù)(或浮點數(shù))會以逗號分隔的形式輸出,例如(1000000會輸出 1,000,000)。
          align:指定數(shù)據(jù)的對齊方式,具體的對齊方式如表 1 所示。

          align

          含義

          <

          數(shù)據(jù)左對齊。

          >

          數(shù)據(jù)右對齊。

          =

          數(shù)據(jù)右對齊,同時將符號放置在填充內(nèi)容的最左側(cè),該選項只對數(shù)字類型有效。

          ^

          數(shù)據(jù)居中,此選項需和 width 參數(shù)一起使用。

          sign:指定有無符號數(shù),此參數(shù)的值以及對應(yīng)的含義如下表所示。

          sign參數(shù)

          含義

          +

          正數(shù)前加正號,負數(shù)前加負號。

          -

          正數(shù)前不加正號,負數(shù)前加負號。

          空格

          正數(shù)前加空格,負數(shù)前加負號。

          #

          對于二進制數(shù)、八進制數(shù)和十六進制數(shù),使用此參數(shù),各進制數(shù)前會分別顯示 0b、0o、0x前綴;反之則不顯示前綴。

          width:指定輸出數(shù)據(jù)時所占的寬度。

          precision:指定保留的小數(shù)位數(shù)。

          type:指定輸出數(shù)據(jù)的具體類型,如下表所示。

          type類型值

          含義

          s

          對字符串類型格式化。

          d

          十進制整數(shù)。

          c

          將十進制整數(shù)自動轉(zhuǎn)換成對應(yīng)的 Unicode 字符。

          e 或者 E 

          轉(zhuǎn)換成科學(xué)計數(shù)法后,再格式化輸出。

          g 或 G

          自動在 e 和 f(或 E 和 F)中切換。

          b

          將十進制數(shù)自動轉(zhuǎn)換成二進制表示,再格式化輸出。

          o

          將十進制數(shù)自動轉(zhuǎn)換成八進制表示,再格式化輸出。

          x 或者 X

          將十進制數(shù)自動轉(zhuǎn)換成十六進制表示,再格式化輸出。

          f 或者 F

          轉(zhuǎn)換為浮點數(shù)(默認小數(shù)點后保留 6 位),再格式化輸出。

          %

          顯示百分比(默認顯示小數(shù)點后 6 位)。

          每個參數(shù)的取值范圍

          str             ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]fill            ::=  <any character>align           ::=  "<" | ">" | "=" | "^"sign            ::=  "+" | "-" | " "width           ::=  正整數(shù)grouping_option ::=  "_" | ","precision       ::=  正整數(shù)type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" |                     "x" | "X" | "%"


          ···  END  ···

          往期精彩回顧




          本站qq群851320808,加入微信群請掃碼:
          瀏覽 128
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美亚洲日本 | 黄色电影在线免费观看网站 | 欧美好爽| 国产精品在线免费观看视频 | 古典武侠区伊人一区人妻在线 |