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

Python實(shí)現(xiàn)字符串格式化的方法小結(jié)

 更新時(shí)間:2017年02月20日 11:08:42   作者:新月的力量_141  
本篇文章主要介紹了Python實(shí)現(xiàn)字符串格式化的方法小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

Python2.6+ 增加了str.format函數(shù),用來代替原有的'%'操作符。它使用比'%'更加直觀、靈活。下面詳細(xì)介紹一下它的使用方法。

下面是使用'%'的例子:

""
"PI is %f..." % 3.14159 # => 'PI is 3.141590...'
"%d + %d = %d" % (5, 6, 5+6) # => '5 + 6 = 11'
"The usage of %(language)s" % {"language": "python"} # => 'The usage of python'

格式很像C語言的printf是不是?由于'%'是一個(gè)操作符,只能在左右兩邊各放一個(gè)參數(shù),因此右邊多個(gè)值需要用元組或者字典來包括,不能元組字典一起用,缺乏靈活度。

同樣的例子用format方法改寫:

"PI is {0}...".format(3.14159) # => 'PI is 3.14159...'
"{0} + {1} = {2}".format(5, 6, 5+6) # => '5 + 6 = 11'
"The usage of {language}".format(language = "Python") # => 'The usage of Python'

是不是很直觀?(當(dāng)然,使用C語言的我也很喜歡前一種格式表達(dá)方式 :-) )

格式化字符串

"{named} consist of intermingled character {0} and {1}".format("data", "markup", \
  named = "Formats trings")
format(10.0, "7.3g") # => '   10'
"My name is {0} :-{{}}".format('Fred') # => 'My name is Fred :-{}'

注意第一行的'\',如果一個(gè)語句要換行,必須在結(jié)尾加上反斜線轉(zhuǎn)義。

用'%'無法像這樣將元組和字典混用。其實(shí)這里是命名參數(shù),Python的一個(gè)特性??梢栽诙x數(shù)組的時(shí)候用*args, **kwargs語法展開集合和字典。需要注意,命名參數(shù)放在后面。

第二個(gè)語句表示format內(nèi)置函數(shù)用來格式化單個(gè)值。

第三個(gè)語句表示了{(lán)}的轉(zhuǎn)義,因?yàn)閧}在被格式化字符串里是特殊字符,不能直接顯示。轉(zhuǎn)義方式是多嵌套一層。

使用屬性和索引

"My name is {0.name}".format(open('out.txt', 'w')) # => 'My name is out.txt'

'{0.name}' 相當(dāng)于調(diào)用對(duì)象的屬性 open('out.txt', 'w').name

"My name is {0[name]}".format(dict(name='Fred')) # => 'My name is Fred'

使用索引也是可以的。

obj[key] 相當(dāng)于 obj.____getitem____('key')

標(biāo)準(zhǔn)說明符(Specifiers)

寫過C語言的程序員應(yīng)該清楚printf的復(fù)雜。format也定義了很多標(biāo)準(zhǔn)的說明符,用來解釋一個(gè)值的格式,然后插入字符串內(nèi)。例如:

"My name is {0:8}".format('Fred') # => 'My name is Fred  '

':'之后便是說明符了,上面例子中說明符只有一個(gè)'8'(minimumwidth),它表示插入的值寬度至少為8。'Fred'只有4,所以又加了4個(gè)空格。

說明符的詳細(xì)格式為:

[[fill]align][sign][#][0][minimumwidth][.precision][type](不比C的printf更簡潔啊!)

注意:'[]'表示該元素可選。所以,所有的格式說明符都是可選的!就像之前的例子,幾乎都沒有用這個(gè)(只是為了例子更清晰)。實(shí)際上,這些是很有用的。

我們一個(gè)個(gè)來看:
1、[fill]align 表示排列方式。當(dāng)minimumwidth設(shè)置的比插入的值大時(shí),就有了留白,就像上一個(gè)例子中的'My name is Fred '。默認(rèn)把留白放在了右邊,也就是說插入值默認(rèn)是左對(duì)齊的。如果我們?cè)囋噞0:>8},會(huì)發(fā)現(xiàn)結(jié)果變成了'My name is Fred'。
fill 表示用來填充留白的字符。只有在align指定了的情況下fill才有用! align可以是下面的標(biāo)識(shí):

  •  < 左對(duì)齊,默認(rèn)
  • > 右對(duì)齊
  • = 將留白放在align標(biāo)識(shí)后面,只對(duì)數(shù)字有效。什么意思呢?align下面會(huì)講到,顯示數(shù)字的正負(fù)號(hào),同樣只對(duì)數(shù)字有效。如果指定了'=',那么就會(huì)把數(shù)字的正負(fù)號(hào)顯示在留白的前面。例如:format(-12, "0=8") # => '-0000012'注意這里用的是格式化單個(gè)值的內(nèi)置函數(shù)format。'0'是fill元素,用它來填充留白;'='就是該標(biāo)識(shí)了;'8'是指最小寬度為8,因此才有5個(gè)留白。那么align呢?align其實(shí)就是說明正負(fù)號(hào)的顯示方式,這里使用默認(rèn)的'-',之后會(huì)講到。
  • ^ 居中對(duì)齊

2、sign 數(shù)字符號(hào),只對(duì)數(shù)字有效。

  • + 顯示加號(hào)和減號(hào)
  • - 不顯示加號(hào),顯示減號(hào)。在不指定最小寬度的情況下負(fù)數(shù)總是比正數(shù)多占一個(gè)符號(hào)位置。默認(rèn)
  • ' ' (一個(gè)空格) 用一個(gè)留白代替加號(hào)

3、# 顯示數(shù)字的前綴表示幾進(jìn)制(0b, 0o, 0x)

4、0 用'0'填充留白。

5、minimumwidth 指定最小寬度,已經(jīng)用過很多次了。

6、.precision 'precision'是一個(gè)十進(jìn)制數(shù)字,表示顯示小數(shù)點(diǎn)后幾位。

7、type 值的類型:

①整型:

  •  b 二進(jìn)制
  • c 字符型,把數(shù)字轉(zhuǎn)成表示unicode的字符
  • d 十進(jìn)制
  • o 八進(jìn)制
  • x 十六進(jìn)制,顯示小寫字母
  • X 十六進(jìn)制,顯示大寫字母
  • n 與d行為相同,使用本地的數(shù)字表示方式
  • ''(空,沒有空格) 與d相同

②浮點(diǎn)數(shù)

  • e 科學(xué)計(jì)數(shù)法表示,小寫e
  • E 科學(xué)計(jì)數(shù)法表示,大寫E
  • f 顯示為定點(diǎn)數(shù),默認(rèn)小數(shù)點(diǎn)后六位
  • F 同f
  • g 自動(dòng)選擇是否用科學(xué)記數(shù)法表示
  • G 同g
  • n 同g,使用本地表示方式
  • % 使用百分比表示
  • ''(空) 同g

每個(gè)對(duì)象可以重寫自己的格式化說明符,例如datatime類重寫了后可以這樣表示:

"Today is: {0:%a %b %d %H:%M:%S %Y}".format(datetime.now())

預(yù)先轉(zhuǎn)換

':'之后是格式說明符,之前還可以加預(yù)先轉(zhuǎn)換的標(biāo)識(shí)

  • !r 調(diào)用對(duì)象的_repr_方法來轉(zhuǎn)換成標(biāo)準(zhǔn)字符串
  • !s 調(diào)用對(duì)象的_str_方法來轉(zhuǎn)換成字符串

重寫_format_方法

我們?cè)诟袷交粋€(gè)字符串時(shí),首先格式化每個(gè)值,然后再插入字符串內(nèi)。格式化值調(diào)用的就是format內(nèi)置方法。format則是簡單地調(diào)用該值的_format_方法。

def format(value, format_spec):
  return value.__format__(format_spec)

在object類內(nèi)實(shí)現(xiàn)了_format方法,只是將本身用str()轉(zhuǎn)換成字符串,然后將字符串傳入內(nèi)置的format方法,實(shí)際上就是調(diào)用轉(zhuǎn)換為字符串后的format_方法。

class object:
  def __format__(self, format_spec):
    return format(str(self), format_spec)

int/float/str自身實(shí)現(xiàn)了_format_方法,前面已經(jīng)介紹了它們各自的說明符。

結(jié)束語

還有一點(diǎn)兒是自定義Formatter,不過平常也用不到。留作下篇string模塊源碼解讀的內(nèi)容吧。建議有興趣的朋友多看看Python標(biāo)準(zhǔn)庫的源碼,很有學(xué)習(xí)價(jià)值。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python xlsxwriter模塊的使用

    python xlsxwriter模塊的使用

    這篇文章主要介紹了python xlsxwriter模塊的使用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python PIL/cv2/base64相互轉(zhuǎn)換實(shí)例

    python PIL/cv2/base64相互轉(zhuǎn)換實(shí)例

    今天小編就為大家分享一篇python PIL/cv2/base64相互轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 一文詳解如何配置Pycharm進(jìn)行遠(yuǎn)程開發(fā)

    一文詳解如何配置Pycharm進(jìn)行遠(yuǎn)程開發(fā)

    在搞深度學(xué)習(xí)的時(shí)候,我們?cè)诒镜亻_發(fā),但是需要在服務(wù)器去運(yùn)行工程,所以需要使用Pycharm進(jìn)行遠(yuǎn)程配置,下面這篇文章主要給大家介紹了關(guān)于如何配置Pycharm進(jìn)行遠(yuǎn)程開發(fā)的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • python三種數(shù)據(jù)結(jié)構(gòu)及13種創(chuàng)建方法總結(jié)

    python三種數(shù)據(jù)結(jié)構(gòu)及13種創(chuàng)建方法總結(jié)

    拿Python來說,數(shù)據(jù)結(jié)構(gòu)的概念也是超級(jí)重要,不同的數(shù)據(jù)結(jié)構(gòu),有著不同的函數(shù),供我們調(diào)用,接下來,我們分別來介紹字符串、列表、字典的創(chuàng)建方法
    2021-09-09
  • Python裝飾器的應(yīng)用場(chǎng)景代碼總結(jié)

    Python裝飾器的應(yīng)用場(chǎng)景代碼總結(jié)

    這篇文章主要介紹了Python裝飾器的應(yīng)用場(chǎng)景,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python基礎(chǔ)之列表常見操作經(jīng)典實(shí)例詳解

    Python基礎(chǔ)之列表常見操作經(jīng)典實(shí)例詳解

    這篇文章主要介紹了Python基礎(chǔ)之列表常見操作,結(jié)合實(shí)例形式詳細(xì)分析了Python列表創(chuàng)建方式、內(nèi)置函數(shù)與相關(guān)使用技巧,需要的朋友可以參考下
    2020-02-02
  • python中@Property屬性使用方法

    python中@Property屬性使用方法

    這篇文章主要介紹了python中@Property屬性使用方法,在Python中,可以通過@property裝飾器將一個(gè)方法轉(zhuǎn)換為屬性,從而實(shí)現(xiàn)用于計(jì)算的屬性,下面文章圍繞主題展開更多相關(guān)詳情,感興趣的小伙伴可以參考一下
    2022-06-06
  • Pycharm中import?torch報(bào)錯(cuò),python中import?torch不報(bào)錯(cuò)的解決

    Pycharm中import?torch報(bào)錯(cuò),python中import?torch不報(bào)錯(cuò)的解決

    這篇文章主要介紹了Pycharm中import?torch報(bào)錯(cuò),python中import?torch不報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python數(shù)據(jù)分析之分析千萬級(jí)淘寶數(shù)據(jù)

    Python數(shù)據(jù)分析之分析千萬級(jí)淘寶數(shù)據(jù)

    網(wǎng)購已經(jīng)成為人們生活不可或缺的一部分,本次項(xiàng)目基于淘寶app平臺(tái)數(shù)據(jù),通過相關(guān)指標(biāo)對(duì)用戶行為進(jìn)行分析,從而探索用戶相關(guān)行為模式。感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • Python進(jìn)度條的制作代碼實(shí)例

    Python進(jìn)度條的制作代碼實(shí)例

    這篇文章主要介紹了Python進(jìn)度條的制作代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論