欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python格式化字符串f-string概覽(小結)

系統 1784 0

簡介

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

While other string literals always have a constant value, formatted strings are really expressions evaluated at run time.
(與具有恒定值的其它字符串常量不同,格式化字符串實際上是運行時運算求值的表達式。)
―― Python Documentation

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

用法

此部分內容主要參考以下資料:

Python Documentation ?C Formatted String Literals

Python Documentation ?C Format String Syntax

PEP 498 ?C Literal String Interpolation

Python 3's f-Strings: An Improved String Formatting Syntax (Guide)

python3 f-string格式化字符串的高級用法

Python 3: An Intro to f-strings

簡單使用

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

            
>>> name = 'Eric'
>>> f'Hello, my name is {name}'
'Hello, my name is Eric'

>>> number = 7
>>> f'My lucky number is {number}'
'My lucky number is 7'

>>> price = 19.99
>>> f'The price of this book is {price}'
'The price of this book is 19.99'
          

表達式求值與函數調用

f-string的大括號 {} 可以填入表達式或調用函數,Python會求出其結果并填入返回的字符串內:

            
>>> 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)'

>>> name = 'ERIC'
>>> f'My name is {name.lower()}'
'My name is eric'

>>> import math
>>> f'The answer is {math.log(math.pi)}'
'The answer is 1.1447298858494002'
          

引號、大括號與反斜杠

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

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

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

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

>>> f'He said {"I'm Eric"}'
 File "
              
                ", 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"
              
            
          

大括號外的引號還可以使用 \ 轉義,但大括號內不能使用 \ 轉義:

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

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

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

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

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

>>> newline = ord('\n')
>>> f'newline: {newline}'
'newline: 10'
            
          

多行f-string

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

            
>>> name = 'Eric'
>>> age = 27
>>> f"Hello!" \
... f"I'm {name}." \
... f"I'm {age}."
"Hello!I'm Eric.I'm 27."
>>> f"""Hello!
...   I'm {name}.
...   I'm {age}."""
"Hello!\n  I'm Eric.\n  I'm 27."
          

自定義格式:對齊、寬度、符號、補零、精度、進制等

f-string采用 {content:format} 設置字符串格式,其中 content 是替換并填入字符串的內容,可以是變量、表達式或函數等, format 是格式描述符。采用默認格式時不必指定 {:format} ,如上面例子所示只寫 {content} 即可。

關于格式描述符的詳細語法及含義可查閱Python官方文檔,這里按使用時的先后順序簡要介紹常用格式描述符的含義與作用:

格式描述符 含義與作用
< 左對齊(字符串默認對齊方式)
> 右對齊(數值默認對齊方式)
^ 居中

數字符號相關格式描述符

格式描述符 含義與作用
+ 負數前加負號(-),正數前加正號(+)
- 負數前加負號(-),正數前不加任何符號(默認)
(空格) 負數前加負號(-),正數前加一個空格

注:僅適用于數值類型。

數字顯示方式相關格式描述符

格式描述符 含義與作用
# 切換數字顯示方式

注1:僅適用于數值類型。

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

數值類型 不加 # (默認) # 區別
二進制整數 '1111011' '0b1111011' 開頭是否顯示 0b
八進制整數 '173' '0o173' 開頭是否顯示 0o
十進制整數 '123' '123' 無區別
十六進制整數(小寫字母) '7b' '0x7b' 開頭是否顯示 0x
十六進制整數(大寫字母) '7B' '0X7B' 開頭是否顯示 0X

寬度與精度 相關格式描述符

格式描述符 含義與作用
width 整數 width 指定寬度
0width 整數 width 指定寬度,開頭的 0 指定高位用 0 補足寬度
width.precision 整數 width 指定寬度,整數 precision 指定顯示精度

注1: 0width 不可用于復數類型和非數值類型, width.precision 不可用于整數類型。
注2: width.precision 用于不同格式類型的浮點數、復數時的含義也不同:用于 f F e E % precision 指定的是小數點后的位數,用于 g G precision 指定的是有效數字位數(小數點前位數+小數點后位數)。
注3: width.precision 除浮點數、復數外還可用于字符串,此時 precision 含義是只使用字符串中前 precision 位字符。

示例:

            
>>> a = 123.456
>>> f'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   '
          

千位分隔符相關格式描述符

格式描述符 含義與作用
, 使用,作為千位分隔符
_ 使用_作為千位分隔符

注1:若不指定 , _ ,則f-string不使用任何千位分隔符,此為默認設置。
注2: , 僅適用于浮點數、復數與十進制整數:對于浮點數和復數, , 只分隔小數點前的數位。
注3: _ 適用于浮點數、復數與二、八、十、十六進制整數:對于浮點數和復數, _ 只分隔小數點前的數位;對于二、八、十六進制整數,固定從低位到高位每隔四位插入一個 _ (十進制整數是每隔三位插入一個 _ )。

示例:

            
>>> a = 1234567890.098765
>>> f'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 = 1234567890
>>> f'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_02d2'
          

格式類型相關格式描述符

基本格式類型

格式描述符 含義與作用 適用變量類型
s 普通字符串格式 字符串
b 二進制整數格式 整數
c 字符格式,按unicode編碼將整數轉換為對應字符 整數
d 十進制整數格式 整數
o 八進制整數格式 整數
x 十六進制整數格式(小寫字母) 整數
X 十六進制整數格式(大寫字母) 整數
e 科學計數格式,以 e 表示 ×10^ 浮點數、復數、整數(自動轉換為浮點數)
E e 等價,但以 E 表示 ×10^ 浮點數、復數、整數(自動轉換為浮點數)
f 定點數格式,默認精度( precision )是6 浮點數、復數、整數(自動轉換為浮點數)
F f 等價,但將 nan inf 換成 NAN INF 浮點數、復數、整數(自動轉換為浮點數)
g 通用格式,小數用 f ,大數用 e 浮點數、復數、整數(自動轉換為浮點數)
G G 等價,但小數用 F ,大數用 E 浮點數、復數、整數(自動轉換為浮點數)
% 百分比格式,數字自動乘上100后按 f 格式排版,并加 % 后綴 浮點數、整數(自動轉換為浮點數)

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

格式描述符 含義 顯示樣例
%a 星期幾(縮寫) 'Sun'
%A 星期幾(全名) 'Sunday'
%w 星期幾(數字, 0 是周日, 6 是周六) '0'
%u 星期幾(數字, 1 是周一, 7 是周日) '7'
%d 日(數字,以 0 補足兩位) '07'
%b 月(縮寫) 'Aug'
%B 月(全名) 'August'
%m 月(數字,以 0 補足兩位) '08'
%y 年(后兩位數字,以 0 補足兩位) '14'
%Y 年(完整數字,不補零) '2014'
%H 小時(24小時制,以 0 補足兩位) '23'
%I 小時(12小時制,以 0 補足兩位) '11'
%p 上午/下午 'PM'
%M 分鐘(以 0 補足兩位) '23'
%S 秒鐘(以 0 補足兩位) '56'
%f 微秒(以 0 補足六位) '553777'
%z UTC偏移量(格式是 ±HHMM[SS] ,未指定時區則返回空字符串) '+1030'
%Z 時區名(未指定時區則返回空字符串) 'EST'
%j 一年中的第幾天(以 0 補足三位) '195'
%U 一年中的第幾周(以全年首個周日后的星期為第0周,以 0 補足兩位) '27'
%w 一年中的第幾周(以全年首個周一后的星期為第0周,以 0 補足兩位) '28'
%V 一年中的第幾周(以全年首個包含1月4日的星期為第1周,以 0 補足兩位) '28'

綜合示例

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

>>> b = 1234.5678
>>> f'b is {b:<+10.2f}'  # 左對齊,寬度10位,顯示正號(+),定點數格式,2位小數
'b is +1234.57 '

>>> c = 12345678
>>> f'c is {c:015,d}'   # 高位補零,寬度15位,十進制整數,使用,作為千分分割位
'c is 000,012,345,678'

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

>>> import datetime
>>> e = datetime.datetime.today()
>>> f'the time is {e:%Y-%m-%d (%a) %H:%M:%S}'  # datetime時間格式
'the time is 2018-07-14 (Sat) 20:46:02'
          

lambda表達式

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

            
>>> f'result is {lambda x: x ** 2 + 1 (2)}'
 File "
            
              ", line 1
  (lambda x)
       ^
SyntaxError: unexpected EOF while parsing

>>> 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 '
            
          

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品小短片 | 亚洲 欧洲 偷拍 校园 另类 | 精品久久久久久久久久久久久久 | 毛片一区二区 | 毛片特级| 玖玖啪| 亚洲欧美视频在线 | 国产亚洲精品看片在线观看 | 欧美亚洲在线视频 | 91私密视频 | 免费一级特黄3大片视频 | 欧美特黄aaa| 青草国产超碰人人添人人碱 | 男女啪啪免费观看无遮挡动态图片 | 男女网| 亚洲精品视频一区二区三区 | 午夜影音 | 国产精品夜色一区二区三区 | 亚洲精品人成网线在线 | 国产成人免费无庶挡视频 | 久久久久久天天夜夜天天 | 国产精选经典三级小泽玛利亚 | 在线成人免费视频 | 国产亚洲精彩视频 | 波多野结衣mxgs1124在线 | 国产女人成人精品视频 | 三人弄娇妻高潮3p视频 | 青娱乐在线视频观看 | 超级成人97碰碰碰免费 | 泰国一级毛片aaa下面毛多 | 精品欧美一区二区精品久久久 | 视频一区 精品自拍 | 国产精品香蕉一区二区三区 | 乳欲人妻办公室奶水在线电影国产 | 亚洲综合一二三区 | 久久se精品一区精品二区 | 婷婷国产在线观看 | 精品视频一区二区三区免费 | 欧美精品一区二区在线观看 | 久久精品91久久久久久再现 | 国产福利不卡视频在免费播放 |