<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】55個案例:吃透Python字符串格式化

          共 11423字,需瀏覽 23分鐘

           ·

          2021-08-15 11:57

          公眾號:尤而小屋
          作者:Peter
          編輯:Peter

          在上一篇Python字符串初相識中,我們介紹了字符串的很多基礎(chǔ)內(nèi)容。本文中介紹的字符串一個非常重要的知識點:字符串格式化輸出。

          python入門教程-字符串初相識

          格式化怎么理解?簡答來說:就是讓字符串按照我們設(shè)定的格式來輸出,達到我們想要的結(jié)果。主要是有4種方式:

          • %:基于占位符的格式化
          • format()函數(shù)的格式化:重點掌握
          • f-string格式化:重點掌握
          • 字符串模板函數(shù)string template

          一、占位符%

          常見格式符

          格式化符號其實是為真實的值預(yù)留出一個空位,而且還可以控制顯示的格式。格式符包含一個類型碼,用來顯示不同的數(shù)據(jù)類型,比如字符串、二進制、指數(shù)等。常見的不同的占位符如下:

          • %s:   字符串 (采用str()的顯示),常用
          • %r:   字符串 (采用repr()的顯示)
          • %c:   單個字符,格式化字符及其ASCII碼
          • %b:   二進制整數(shù)
          • %u:   格式化無符號整數(shù),常用
          • %d:   格式化十進制整數(shù),常用
          • %i:   十進制整數(shù)
          • %o:   八進制整數(shù)
          • %x:   十六進制整數(shù)
          • %g:   指數(shù)(e)或浮點數(shù)%f (根據(jù)顯示長度)
          • %G:   指數(shù)(E)或浮點數(shù)%F (根據(jù)顯示長度)
          • %e:   指數(shù) (基底寫為e),用科學(xué)計數(shù)法格式化浮點數(shù)
          • %E:   指數(shù) (基底寫為E),用法同%e
          • %f:   浮點數(shù),格式化浮點數(shù)字,可以指定小數(shù)點后面的精度,常用
          • %F:   浮點數(shù),與%f相同
          • %%:   字符“%”,用來顯示百分號%

          對齊問題

          關(guān)于對齊問題:

          1. ^:居中對齊
          2. >:右對齊
          3. <:左對齊
          4. +、-:顯示正負號

          語法形式

          常用的語法形式為:%[(name)][flags][width].[precision] typecode

          • (name):參數(shù)的名稱,可以省略;如果使用必須加上()
          • flags:對齊標志位;可以是+、-、“”、0;+右對齊,-左對齊,""填充一個空格;0表示左側(cè)使用0填充
          • width:顯示的寬度
          • precision:小數(shù)點后的精度

          多種類型連用

          print("%9.3f" % 2.3)  
              2.300  #  前面4個空格
          • 第一個 % 后面的內(nèi)容為顯示的格式說明,9 為顯示寬度,3 為小數(shù)點位數(shù),f 表示輸出為浮點數(shù)類型
          • 第二個 % 后面為顯示的內(nèi)容來源,輸出結(jié)果默認為右對齊,2.300 長度為 5,故前面有4個空格
          print("%+9.3f" % 2.3)  # 帶上+符號輸出,9表示寬度,3表示小數(shù)位
             +2.300
          print("%-9.3f" % 2.3)  # -表示左對齊輸出
          2.300
          print("%-9.3f" % -2.3)  
          -2.300
          # 我們顯示聲明3個變量

          name = "Yule Cottage"  # 字符串類型
          age = 25  # 整數(shù)類型
          height = 1.76   # 浮點數(shù)類型
          # 1、浮點數(shù)默認是6位小數(shù)
          # 2、%f和%F相同

          print("我是:%s,年齡: %d,身高是:%f" % (name,age,height))
          我是:Yule Cottage,年齡: 25,身高是:1.760000
          # 指定浮點數(shù)的小數(shù)位

          print("我是:%s,年齡: %d,身高是:%.3f" % (name,age,height))
          我是:Yule Cottage,年齡: 25,身高是:1.760

          下面的代碼是通過字典對的形式來傳入不同的數(shù)據(jù)類型,字典(后面會介紹python的字典)的值就是待格式的內(nèi)容。

          需要注意的是name、age、height必須寫在%號的后面

          print("我是:%(name)s,年齡: %(age)d,身高是:%(height).3f" % {"name":name,"age":age,"height":height})
          我是:Yule Cottage,年齡: 25,身高是:1.760

          輸出不同進制

          print("八進制:%o,十進制:%i,十六進制:%x" %(age,age,age))
          八進制:31,十進制:25,十六進制:19
          # print("二進制:%b" %(age))   # 二進制不能使用
          bin(age)  # 通過bin函數(shù)查看
          '0b11001'

          輸出的寬度、精度等設(shè)置

          number = 1.23456789

          # 寬度為10,保留小數(shù)點后4位,默認是右對齊
          print("%10.4f" % number)  
              1.2346
          print("%-10.4f" % number)  # -符號表示左對齊,顯示4位小數(shù)
          1.2346
          # 右對齊,保留10位小數(shù),不足的用0補齊

          print("%10.10f" % number)  
          1.2345678900
          print("%-10.8f" % number)  # 左對齊,保留8位小數(shù)
          1.23456789
          # 左對齊,保留7位小數(shù),會自動地進行四舍五入

          print("%-10.7f" % number)  
          1.2345679

          下面是針對字符串的寬度等輸出設(shè)置:

          name
          'Yule Cottage'
          print("%.10s" % name) # 9個字母+一個空格:左對齊
          Yule Cotta
          print("%.15s" % name) # 如果位數(shù)不夠,直接全部輸出
          Yule Cottage
          print("%10.6s" % name) # 右對齊,取出6個字符
              Yule C

          解釋:總長度為10,前面4個空格,加上4+一個空格+C

          二、format格式化

          從python2.6+開始,新增了一種格式化字符串的函數(shù)str.format,可以說極大地增強了字符串格式化的功能,基本語法是通過{}:來代替占位符%

          • 接收多個不限制的參數(shù)
          • 位置可以不按照順序

          語法形式

          {<參數(shù)序號>:<格式控制標記>} ,中間有一個冒號,不能省略!??!

          name = "Yule Cottage"  # 字符串類型
          age = 25  # 整數(shù)類型
          height = 1.76   # 浮點數(shù)類型
          sex = "男"

          多個參數(shù)連用

          # 1、不設(shè)置位置
          print("名字是:{},年齡是:{},身高是:{},性別:{}".format(name,age,height,sex))
          名字是:Yule Cottage,年齡是:25,身高是:1.76,性別:男
          # 2、設(shè)置位置參數(shù)

          print("名字是:{0},年齡是:{1},身高是:{2},性別:{3}".format(name,age,height,sex))
          名字是:Yule Cottage,年齡是:25,身高是:1.76,性別:男
          # 設(shè)置位置參數(shù)
          # 索引從0開始;2號位對應(yīng)的height

          print("名字是:{0},身高是:{2},年齡是:{1},性別:{3}".format(name,age,height,sex))
          名字是:Yule Cottage,身高是:1.76,年齡是:25,性別:男
          print("性別:{3},身高是:{2},名字是:{0},年齡是:{1}".format(name,age,height,sex))
          性別:男,身高是:1.76,名字是:Yule Cottage,年齡是:25
          # 3、元組形式
          # 使用*進行解析

          information = ("Peter",25)

          print("姓名是:{},年齡是:{}".format(*information))
          姓名是:Peter,年齡是:25
          # 4、字典形式
          # 參數(shù)為字典時候,通過**進行解析配對

          print("名字是:{name},年齡是:{age},身高是:{height},性別:{sex}".format(**{"name":name,"age":age,"height":height,"sex":sex}))
          名字是:Yule Cottage,年齡是:25,身高是:1.76,性別:男
          # 5、直接變量賦值

          print("名字是:{name},年齡是:{age},身高是:{height},性別:{sex}".format(name="Yule Cottage",age="2歲",height="1.75m",sex="男"))
          名字是:Yule Cottage,年齡是:2歲,身高是:1.75m,性別:男

          對齊

          寬度為20,我們實現(xiàn)居中、靠左、靠右對齊

          name
          'Yule Cottage'
          print("{:^20s}".format(name))  # 居中
          print("{:>20s}".format(name))  # 靠右
          print("{:<20s}".format(name))  # 靠左
              Yule Cottage    
          Yule Cottage
          Yule Cottage

          數(shù)值多種形式

          首先我們還是看看對齊問題,浮點數(shù)的對齊只保留6位小數(shù):

          pi = 3.1415926

          print("{:^20f}".format(pi))  # 居中  # 默認只保留6位小數(shù)
          print("{:>20f}".format(pi))  # 靠右
          print("{:<20f}".format(pi))  # 靠左
                3.141593      
          3.141593
          3.141593

          看看不同情況下的輸出格式,浮點數(shù)需要帶上小數(shù)點,默認全部是左對齊:

          # 不同的輸出方式

          print("{}".format(pi))  # 原數(shù)據(jù)
          print("{:.2f}".format(pi))   # 2位小數(shù)
          print("{:>.10f}".format(pi))  # 位數(shù)不足,右側(cè)補0
          print("{:.4%}".format(pi))  # 百分比輸出
          print("{:.2e}".format(pi))
          3.1415926
          3.14
          3.1415926000
          314.1593%
          3.14e+00

          填充

          sex
          '男'
          print("{0:30}".format(sex))  # 字符串默認左對齊
          print("{:>30}".format(sex))  # 改成右對齊
          print("{0:30}".format(age))  # 數(shù)值類型默認右對齊
          print("{:<30}".format(height)) # 改成左對齊


          25
          1.76
          # 指定填充的字符

          print("{:*>30}".format(sex))  # *
          print("{:+>30}".format(sex))  # +
          print("{:+^30}".format(sex))  # 居中后填充+
          print("{:+<30}".format(height)) # +
          *****************************男
          +++++++++++++++++++++++++++++男
          ++++++++++++++男+++++++++++++++
          1.76++++++++++++++++++++++++++

          千位分隔符

          主要是用來顯示數(shù)字的千位分隔符,在貨幣金額中使用的比較多:

          b = 1003005000600

          print("{:-^20}".format(b))   # 不用逗號
          print("{:-^20,}".format(b))  # 用逗號
          ---1003005000600----
          -1,003,005,000,600--
          # 小數(shù)的千位分隔符顯示

          print("{0:-20,}".format(12567.98760))  # 不填充
          print("{0:-^20,}".format(12567.98760))  # 居中+填充
          print("{0:->20,}".format(12567.98760))  # 右對齊+填充
          print("{0:-<20,}".format(12567.98760))  # 左對齊+填充
                   12,567.9876
          ----12,567.9876-----
          ---------12,567.9876
          12,567.9876---------

          精度

          精度輸出的時候前面必須有一個小數(shù)點開頭,具有兩層含義:

          • 浮點數(shù):表示輸出小數(shù)位的有效位數(shù)
          • 字符串:精度表示輸出的最大長度
          pi
          3.1415926
          "{:.3f}".format(pi)
          '3.142'
          "{:30.5f}".format(pi)  # 小數(shù)點后5位,整體寬度30
          '                       3.14159'
          "{:*^30.5f}".format(pi)  # 小數(shù)點后5位,寬度30,居中后補充*
          '***********3.14159************'
          name
          'Yule Cottage'
          "{:.4}".format(name)  # 最大長度為4
          'Yule'
          "{:.6}".format(name)  # 輸出最大長度為6
          'Yule C'

          多種輸出類型

          表示輸出整數(shù)和浮點數(shù)類型的格式規(guī)則。對于整數(shù)類型,輸出格式包括6 種:

          • c: 輸出整數(shù)對應(yīng)的 Unicode 字符;
          • b: 輸出整數(shù)的二進制方式;
          • o: 輸出整數(shù)的八進制方式;
          • d: 輸出整數(shù)的十進制方式;
          • x: 輸出整數(shù)的小寫十六進制方式;
          • X: 輸出整數(shù)的大寫十六進制方式;

          下面的例子表示的是365的二進制、Unicode字符、十進制、小寫16進制和大寫的16進制的不同輸出格式:

          "{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(365)
          '101101101,?,365,555,16d,16D'

          如果是浮點數(shù)類型,那么輸出格式包括4種:

          • e: 輸出浮點數(shù)對應(yīng)的小寫字母 e 的指數(shù)形式;
          • E: 輸出浮點數(shù)對應(yīng)的大寫字母 E 的指數(shù)形式;
          • f: 輸出浮點數(shù)的標準浮點形式;
          • %: 輸出浮點數(shù)的百分形式。

          浮點數(shù)輸出時盡量使用<.精度>表示小數(shù)部分的寬度,有助于更好控制輸出格式。

          "{0:e},{0:E}".format(3.1415)
          '3.141500e+00,3.141500E+00'
          "{0:f},{0:F}".format(3.1415)
          '3.141500,3.141500'
          "{0:%}".format(3.1415)  # 保留6位小數(shù),百分比輸出
          '314.150000%'
          "{0:.2%}".format(3.1415)  # 2位小數(shù),百分比輸出
          '314.15%'

          三、f-string

          f-string是python3.6開始引入的新字符串格式化方法。其實它的方法很多和format是類似的,下面通過具體的例子來講解。

          簡單例子

          首先我們看一個簡單的例子,說明f-string如何使用:

          a = "hello"
          b = "python"

          f"{a} "
          'hello python'

          指定變量格式化

          # 我們顯示聲明3個變量

          name = "Yule Cottage"  # 字符串類型
          age = 25  # 整數(shù)類型
          height = 1.76   # 浮點數(shù)類型
          f'名字是:{name},年齡是:{age},身高是:{height}'  # 前面加上f
          '名字是:Yule Cottage,年齡是:25,身高是:1.76'

          我們和format進行一下對比:

          "名字是:{},年齡是:{},身高是:{}".format(name,age,height)  # format函數(shù)在最后面
          '名字是:Yule Cottage,年齡是:25,身高是:1.76'

          指定表達式格式化

          如果后面的string部分是表達式,也可以進行格式化

          f'{1+2+3}'
          '6'
          f'{1*2*3*4}'
          '24'

          對表達式進行變量的賦值再格式化:

          x = 100
          y = 50

          f"{x*y + x/y}"  # 100*50 + 100 / 50 結(jié)果是浮點數(shù)
          '5002.0'

          指定函數(shù)格式化

          上面的例子是直接賦值再通過表達式來格式化,我們其實可以將上面的表達式改成函數(shù),傳入?yún)?shù)來格式化,函數(shù)可以是:

          • python自帶的函數(shù)
          • 自定義的函數(shù)
          # 自帶函數(shù)
          print(f'my name is: {name}')  # 原數(shù)據(jù)
          print(f'my name is: {name.upper()}')  # 全部變成大寫字母
          my name is: Yule Cottage
          my name is: YULE COTTAGE
          # 自己寫個函數(shù)

          def test(a,b):
              return a * b + a / b

          f'{test(100,50)}'
          '5002.0'
          # 或者直接寫成lambda 匿名函數(shù)

          f'執(zhí)行的結(jié)果是:{(lambda x,y: x*y + x/y)(100,50)}'
          '執(zhí)行的結(jié)果是:5002.0'

          對齊

          • <:靠左,字符串默認方式
          • >:靠右,數(shù)值類型默認方式
          • ^:居中
          print(f'{name}')  # 字符串默認左
          print(f'{name:>20.10s}')  # > 右對齊 長度20  字符串最大長度10
          print(f'{name:<20.12s}')  # < 左對齊 長度20  字符串最大長度12 
          Yule Cottage
          Yule Cotta
          Yule Cottage
          pi = 3.1415926

          print(f'{pi}')  # 原數(shù)據(jù)
          print(f'{pi:^10.4f}')  # 居中 長度為10  保留4位小數(shù)
          print(f'{pi:>10.4f}')  # 靠右 長度為10  保留4位小數(shù)
          print(f'{pi:<10.4f}')  # 靠左 長度為10  保留3位小數(shù)
          3.1415926
          3.1416
          3.1416
          3.1416

          填充

          print(f'{pi}')  # 原數(shù)據(jù)

          print(f'{pi:*^10.4f}')  # 填充*:居中 長度為10  保留4位小數(shù)
          print(f'{pi:*>10.4f}')  # 填充*:靠右 長度為10  保留4位小數(shù)
          print(f'{pi:*<10.4f}')  # 填充*:靠左 長度為10  保留3位小數(shù)
          3.1415926
          **3.1416**
          ****3.1416
          3.1416****

          千位分隔符

          和format中的千位分隔符相同,主要是用于金融貨幣中,自帶金錢屬性呀??梢允褂枚禾柣蛘咂渌?,常用逗號:

          money = 1234567890

          print(f'{money:,f}')  # 輸出保留6位小數(shù)
          1,234,567,890.000000
          print(f'{money:_f}')   # 使用下滑線
          1_234_567_890.000000

          四、字符串模板string template

          string.Template是將一個string設(shè)置為模板,通過替換變量的方法,最終得到想要的string

          from string import Template  # 導(dǎo)入模板

          template_string = '$name is $sex'

          s = Template('$name is $sex')
          s.substitute(name="Peter",sex="male")
          'Peter is male'
          from string import Template  # 導(dǎo)入模板

          template_string = '$name is $sex'  # 1、設(shè)置模板
          s = Template(template_string)  

          dic = {"name":"Peter","sex":"male"}

          s.substitute(dic)
          'Peter is male'

          在上面的例子中:

          • 模板s中有以$符號說明模板中有兩個變量名,用實際的變量來替換。

          • 格式是dictionary,并且字典中的key值與模板中的變量名要保持一致

          • string.Template默認用$符號來標識出變量;可以進行修改

          from string import Template
          class MyTemplate(Template):     
              delimiter = '%'
          ...     
          s = MyTemplate('%who knows?')  # 改變符號
          s.substitute(who='Peter')
          'Peter knows?'

          五、格式整理

          整理下關(guān)于對齊、精度、數(shù)值類型的符號等知識點:

          對齊

          1. <:右對齊(數(shù)值默認對齊方式)
          2. >:左對齊(字符串默認對齊方式)
          3. ^:居中

          符號

          1. +:負數(shù)前加負號(-),正數(shù)前加正號(+)
          2. -:負數(shù)前加負號(-),正數(shù)前不加任何符號(默認)
          3. 空格:負數(shù)前加負號(-),正數(shù)前加一個空格

          寬度和精度

          • width:指定寬度為width
          • width.precision:寬度為width,精度為precision
          • 0width:寬度為width,指定高位用0補足寬度

          六、總結(jié)

          1、%占位符

          表達式比較直觀,容易上手;但是當參數(shù)變多的時候,格式就變得繁瑣,這種方式現(xiàn)在幾乎淘汰

          2、format函數(shù)

          方法比較靈活,能夠自己設(shè)置參數(shù)來對應(yīng)相應(yīng)的變量;參數(shù)變多的時候,表達式同樣繁瑣,整個式子會非常長

          3、f-string

          相對前兩種方式會靈活些,也更直觀。Python3.6開始出現(xiàn),語句格式可能稍顯復(fù)雜

          重點還是要掌握format函數(shù)和f-string

          往期精彩回顧




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

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产精品久久久久久久久久梁医生 | 午夜av电影| 亚洲欧美乱伦 | 成人深爱激情婷婷 | 性爱福利导航 |