1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python字符串格式化:f-strings

        共 9427字,需瀏覽 19分鐘

         ·

        2021-07-19 11:05

        • 目   錄

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

        •     方法 1 %

        •     方法 2 format

        •     方法 3 f-strings

        • 二、f-strings 常用格式化方法

        •     1、簡單使用

        •     2、表達式求值

        •     3、調(diào)用函數(shù)

        •     4、lambda表達式

        •     5、多行代碼f-string

        •     6、引號、大括號與反斜杠

        •     7、格式限定符

        •         1)填充與對齊

        •         2)數(shù)字符號

        •         3)數(shù)字顯示格式

        •         3)寬度與精度

        •         4)千位分隔符

        •         5)格式類型

        •         6)時間格式

        格式化字符串文字,也稱為 f-strings,是一種非常實用的字符串插值方法。它使用大括號作為變量占位符,使操作和豐富字符串變得容易。使用字符串插值,使得 print 語句的功能強大了很多。

        f-string,亦稱為格式化字符串常量(formatted string literals),是Python3.6新引入的一種字符串格式化方法,該方法源于PEP 498 – Literal String Interpolation,主要目的是使格式化字符串的操作更加簡便。f-string在形式上是以 f 或 F 修飾符引領的字符串(f'xxx'或 F'xxx'),以大括號 {} 標明被替換的字段;f-string在本質(zhì)上并不是字符串常量,而是一個在運行時運算求值的表達式:

        While other string literals always have a constant value, formatted strings are really expressions evaluated at run time. 

        與具有恒定值的其它字符串常量不同,格式化字符串實際上是運行時運算求值的表達式。

        —— Python Documentation

         

        f-string在功能方面不遜于傳統(tǒng)的%-formatting語句和str.format()函數(shù),同時性能又優(yōu)于二者,且使用起來也更加簡潔明了,因此對于Python3.6及以后的版本,推薦使用f-string進行字符串格式化。

         

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

         

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

        方法 1 %

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

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

        方法 2 format

        現(xiàn)階段使用最多的方法,Python2.6 引入,它通過 {} 和 : 來代替%表示占位符,性能比 % 更強大,字符串的 format 方法

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

        方法 3 f-strings

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

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

         

        二、f-strings 常用格式化方法

        1、簡單使用

        f-string用大括號 {} 表示被替換字段,其中直接填入替換內(nèi)容:

        name = 'Eric'f'Hello, my name is {name}''Hello, my name is Eric' number = 8f'My lucky number is {number}''My lucky number is 8'

        #保留4位小數(shù)點 price = 19.99f'The price of this book is {price:.4f}''The price of this book is 19.9900'

         

        2、表達式求值

        f-string的大括號 {} 可以填入表達式,Python會求出其結(jié)果并填入返回的字符串內(nèi)

        f'A total number of {24 * 8 + 4}''A total number of 196' f'Complex number {(2 + 2j) / (2 - 3j)}''Complex number (-0.15384615384615388+0.7692307692307692j)'

         3、調(diào)用函數(shù)

        f-string的大括號 {} 可以調(diào)用函數(shù),并返回函數(shù)的結(jié)果。

        #調(diào)用內(nèi)置的函數(shù),大小寫轉(zhuǎn)換
        name = 'ERIC'f'My name is {name.lower()}''My name is eric'

        #調(diào)用內(nèi)置的函數(shù),進行字符串填充
        num = '12'f'''My num is {num.rjust(10,'*')}''''My num is ********12'
        f'''My num is {num.rjust(10,'0')}''''My num is 0000000012' import mathf'The answer is {math.log(math.pi)}''The answer is 1.1447298858494002

         

        4、lambda表達式

        f-string大括號內(nèi)也可填入lambda表達式,但lambda表達式的 : 會被f-string誤認為是表達式與格式描述符之間的分隔符,為避免歧義,需要將lambda表達式置于括號 () 內(nèi):

        f'result is {(lambda x: x ** 2 + 1) (2)}''result is 5'

        f'result is {(lambda x: x ** 2 + 1) (2):<+7.2f}''result is +5.00 '

         5、多行代碼f-string

        f-string還可用于多行字符串:

        name = 'Eric'age  = 27#每一行都加ff"Hello!" \f"I'm {name}." \f"I'm {age}.""Hello!I'm Eric.I'm 27."#用3引號,只加一個ff"""Hello!     I'm {name}.     I'm {age}.""""Hello!\n    I'm Eric.\n    I'm 27."

         

        6、引號、大括號與反斜杠

        f-string大括號內(nèi)所用的引號不能和大括號外的引號定界符沖突,可根據(jù)情況靈活切換 ' 和 ":

        f'I am {"Eric"}''I am Eric'f'I am {'Eric'}'  File "<stdin>", line 1    f'I am {'Eric'}'                ^SyntaxError: invalid syntax

        若 ' 和 " 不足以滿足要求,還可以使用 ''' 和 """

        f"He said {"I'm Eric"}"  File "<stdin>", line 1    f"He said {"I'm Eric"}"                ^SyntaxError: invalid syntax f'He said {"I'm Eric"}'  File "<stdin>", line 1    f'He said {"I'm Eric"}'                  ^SyntaxError: invalid syntax f"""He said {"I'm Eric"}""""He said I'm Eric"

        f'''He said {"I'm Eric"}'''"He said I'm Eric"

         

        大括號外的引號還可以使用 \ 轉(zhuǎn)義,但大括號內(nèi)不能使用 \ 轉(zhuǎn)義:

        f'''He\'ll say {"I'm Eric"}'''"He'll say I'm Eric"

        f'''He'll say {"I\'m Eric"}''' File "<stdin>", line 1SyntaxError: f-string expression part cannot include a backslash

        f-string大括號外如果需要顯示大括號,則應輸入連續(xù)兩個大括號 {{ 和 }}:

        f'5 {"{stars}"}''5 {stars}'
        f'{{5}} {"stars"}''{5} stars'

        上面提到,f-string大括號內(nèi)不能使用 \ 轉(zhuǎn)義,事實上不僅如此,f-string大括號內(nèi)根本就不允許出現(xiàn) \。如果確實需要 \,則應首先將包含 \ 的內(nèi)容用一個變量表示,再在f-string大括號內(nèi)填入變量名:

        f"newline: {ord('\n')}"  File "<stdin>", line 1SyntaxError: f-string expression part cannot include a backslash newline = ord('\n')f'newline: {newline}''newline: 10'

         

        7、格式限定符

        對齊、寬度、符號、補零、精度、進制等 f-string采用 {content:format} 設置字符串格式,其中 content 是替換并填入字符串的內(nèi)容,可以是變量、表達式或函數(shù)等,format是格式描述符。采用默認格式時不必指定 {:format},如上面例子所示只寫 {content} 即可。 關(guān)于格式描述符的詳細語法及含義可查閱Python官方文檔,這里按使用時的先后順序簡要介紹常用格式描述符的含義與作用。

        1)填充與對齊

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

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

        格式描述符

        含義與作用

        <

        左對齊(字符串默認對齊方式)

        >

        右對齊(數(shù)值默認對齊方式)

        ^

        居中

        num = 18#右對齊f'{num:>8}''      18'
        f'{num:0>8}''00000018'
        f'{num:*>8}''******18'
        #居中對齊f'{num:*^8}''***18*

         

        2)數(shù)字符號

        格式描述符

        含義與作用

        +

        負數(shù)前加負號(-),正數(shù)前加正號(+)

        -

        負數(shù)前加負號(-),正數(shù)前不加任何符號(默認)

        (空格)

        負數(shù)前加負號(-),正數(shù)前加一個空格

        num = 4.23f'{num:+}''+4.23'

         

        3)數(shù)字顯示格式

        格式描述符

        含義與作用

        #

        切換數(shù)字顯示方式

        注1:僅適用于數(shù)值類型。 

        注2:# 對不同數(shù)值類型的作用效果不同,詳見下表:

        數(shù)值類型

        不加#(默認)

        加#

        區(qū)別

        二進制整數(shù)

        '1111011'

        '0b1111011'

        開頭是否顯示 0b

        八進制整數(shù)

        '173'

        '0o173'

        開頭是否顯示 0o

        # 居中,寬度10位,十六進制整數(shù)(大寫字母),顯示0X前綴
        a = 1234f'a is {a:^#10X}'      'a is   0X4D2   '

         

        3)寬度與精度

        格式描述符

        含義與作用

        width

        整數(shù) width 指定寬度

        0width

        整數(shù) width 指定寬度,開頭的 0 指定高位用 0 補足寬度

        width.precision

        整數(shù) width 指定寬度,整數(shù) precision 指定顯示精度

        注1:0width 不可用于復數(shù)類型和非數(shù)值類型,width.precision 不可用于整數(shù)類型。 

        注2:width.precision 用于不同格式類型的浮點數(shù)、復數(shù)時的含義也不同:用于 f、F、e、E 和 % 時 precision 指定的是小數(shù)點后的位數(shù),用于 g 和 G 時 precision 指定的是有效數(shù)字位數(shù)(小數(shù)點前位數(shù)+小數(shù)點后位數(shù))。 

        注3:width.precision 除浮點數(shù)、復數(shù)外還可用于字符串,此時 precision 含義是只使用字符串中前 precision 位字符。

        a = 123.456f'a is {a:8.2f}''a is   123.46'
        f'a is {a:08.2f}''a is 00123.46'
        f'a is {a:8.2e}''a is 1.23e+02'
        f'a is {a:8.2%}''a is 12345.60%'
        f'a is {a:8.2g}''a is 1.2e+02' s = 'hello'f's is {s:8s}'
        's is hello 'f's is {s:8.3s}''s is hel

        精度常跟類型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表示長度為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)

         

         

        4)千位分隔符

        格式描述符

        含義與作用

        ,

        使用,作為千位分隔符

        _

        使用_作為千位分隔符

        注1:若不指定 , 或 _,則f-string不使用任何千位分隔符,此為默認設置。 

        注2:, 僅適用于浮點數(shù)、復數(shù)與十進制整數(shù):對于浮點數(shù)和復數(shù),, 只分隔小數(shù)點前的數(shù)位。 

        注3:_ 適用于浮點數(shù)、復數(shù)與二、八、十、十六進制整數(shù):對于浮點數(shù)和復數(shù),_ 只分隔小數(shù)點前的數(shù)位;對于二、八、十六進制整數(shù),固定從低位到高位每隔四位插入一個 _(十進制整數(shù)是每隔三位插入一個 _)。

        a = 1234567890.098765f'a is {a:f}''a is 1234567890.098765'
        f'a is {a:,f}''a is 1,234,567,890.098765'
        f'a is {a:_f}''a is 1_234_567_890.098765' b = 1234567890f'b is {b:_b}''b is 100_1001_1001_0110_0000_0010_1101_0010'
        f'b is {b:_o}''b is 111_4540_1322'

        f'b is {b:_d}''b is 1_234_567_890'
        f'b is {b:_x}''b is 4996_0'

         

        5)格式類型

        格式描述符

        含義與作用

        適用變量類型

        s

        普通字符串格式

        字符串

        b

        二進制整數(shù)格式

        整數(shù)

        c

        字符格式,按unicode編碼將整數(shù)轉(zhuǎn)換為對應字符

        整數(shù)

        d

        十進制整數(shù)格式

        整數(shù)

        o

        八進制整數(shù)格式

        整數(shù)

        x

        十六進制整數(shù)格式(小寫字母)

        整數(shù)

        X

        十六進制整數(shù)格式(大寫字母)

        整數(shù)

        e

        科學計數(shù)格式,以 e 表示 ×10^

        浮點數(shù)、復數(shù)、整數(shù)(自動轉(zhuǎn)換為浮點數(shù))

        E

        與 e 等價,但以 E 表示 ×10^

        浮點數(shù)、復數(shù)、整數(shù)(自動轉(zhuǎn)換為浮點數(shù))

        f

        定點數(shù)格式,默認精度(precision)是6

        浮點數(shù)、復數(shù)、整數(shù)(自動轉(zhuǎn)換為浮點數(shù))

        F

        與 f 等價,但將 nan 和 inf 換成 NAN 和 INF

        浮點數(shù)、復數(shù)、整數(shù)(自動轉(zhuǎn)換為浮點數(shù))

        g

        通用格式,小數(shù)用 f,大數(shù)用 e

        浮點數(shù)、復數(shù)、整數(shù)(自動轉(zhuǎn)換為浮點數(shù))

        G

        與 G 等價,但小數(shù)用 F,大數(shù)用 E

        浮點數(shù)、復數(shù)、整數(shù)(自動轉(zhuǎn)換為浮點數(shù))

        %

        百分比格式,數(shù)字自動乘上100后按 f 格式排版,并加 % 后綴

        浮點數(shù)、整數(shù)(自動轉(zhuǎn)換為浮點數(shù))

        num = 0.00236f"{num:.2%}"'0.24%'

         

        6)時間格式

        常用的特殊格式類型:標準庫 datetime 給定的用于排版時間信息的格式類型,適用于 date、datetime 和 time 對象

        格式描述符

        含義

        顯示樣例

        %a

        星期幾(縮寫)

        'Sun'

        %A

        星期幾(全名)

        'Sunday'

        %w

        星期幾(數(shù)字,0 是周日,6 是周六)

        '0'

        %u

        星期幾(數(shù)字,1 是周一,7 是周日)

        '7'

        %d

        日(數(shù)字,以 0 補足兩位)

        '07'

        %b

        月(縮寫)

        'Aug'

        %B

        月(全名)

        'August'

        %m

        月(數(shù)字,以 0 補足兩位)

        '08'

        %y

        年(后兩位數(shù)字,以 0 補足兩位)

        '14'

        %Y

        年(完整數(shù)字,不補零)

        '2014'

        %H

        小時(24小時制,以 0 補足兩位)

        '23'

        %I

        小時(12小時制,以 0 補足兩位)

        '11'

        %p

        上午/下午

        'PM'

        %M

        分鐘(以 0 補足兩位)

        '23'

        %S

        秒鐘(以 0 補足兩位)

        '56'

        %f

        微秒(以 0 補足六位)

        '553777'

        %z

        UTC偏移量(格式是 ±HHMM[SS],未指定時區(qū)則返回空字符串)

        '+1030'

        %Z

        時區(qū)名(未指定時區(qū)則返回空字符串)

        'EST'

        %j

        一年中的第幾天(以 0 補足三位)

        '195'

        %U

        一年中的第幾周(以全年首個周日后的星期為第0周,以 0 補足兩位)

        '27'

        %w

        一年中的第幾周(以全年首個周一后的星期為第0周,以 0 補足兩位)

        '28'

        %V

        一年中的第幾周(以全年首個包含1月4日的星期為第1周,以 0 補足兩位)

        '28'

        import datetimee = datetime.datetime.today()edatetime.datetime(2021, 7, 14, 14, 47, 19, 823423)

        f'the time is {e:%Y-%m-%d (%a) %H:%M:%S}' 'the time is 2021-07-14 (Wed) 14:47:19'

         

        綜合示例

        # 左對齊,寬度10位,顯示正號(+),定點數(shù)格式,2位小數(shù)
        b = 1234.5678f'b is {b:<+10.2f}'    'b is +1234.57  '
         
        # 高位補零,寬度15位,十進制整數(shù),使用,作為千分分割位
        c = 12345678f'c is {c:015,d}'     'c is 000,012,345,678'

        # 寬度30位,科學計數(shù)法,3位小數(shù)
        d = 0.5 + 2.5jf'd is {d:30.3e}'      'd is           5.000e-01+2.500e+00j'

         

        ···  END  ···

        推薦閱讀:
        一、Number(數(shù)字)
        全面掌握Python基礎,這一篇就夠了,建議收藏
        Python基礎之數(shù)字(Number)超級詳解
        Python隨機模塊22個函數(shù)詳解
        Python數(shù)學math模塊55個函數(shù)詳解
        二、String(字符串)
        Python字符串的45個方法詳解
        Pandas向量化字符串操作
        Python字符串格式化問題:%、format()與f-strings
        三、List(列表)
        超級詳解系列-Python列表全面解析
        Python輕量級循環(huán)-列表推導式
        四、Tuple(元組)
        Python的元組,沒想象的那么簡單
        五、Set(集合)
        全面理解Python集合,17個方法全解,看完就夠了
        六、Dictionary(字典)
        Python字典詳解-超級完整版
        七、內(nèi)置函數(shù)
        Python初學者必須吃透這69個內(nèi)置函數(shù)!
        八、正則模塊
        Python正則表達式入門到入魔
        筆記 | 史上最全的正則表達式
        八、系統(tǒng)操作
        Python之shutil模塊11個常用函數(shù)詳解
        Python之OS模塊39個常用函數(shù)詳解
        九、進階模塊
        【萬字長文詳解】Python庫collections,讓你擊敗99%的Pythoner
        高手如何在Python中使用collections模塊

        掃描關(guān)注本號↓


        瀏覽 121
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            伊人婷婷丁香 | 无码毛片一区二区无码视频 | 边打电话高潮差点叫出声 | 国产一国产精品一级毛片视频 | 亚洲一区二区电影网 | 美女高潮爽到喷出精子 | 国产高清一二三区 | 揉我胸啊嗯出水了嗯 | av在线观看中文字幕日韩精品 | 永久天堂 |