摘要:相信很多人在格式化字符串的時(shí)候都用的語(yǔ)法,提出一種更先進(jìn)的格式化方法并成為的標(biāo)準(zhǔn)用來(lái)替換舊的格式化語(yǔ)法,從開(kāi)始已經(jīng)實(shí)現(xiàn)了這一方法其它解釋器未考證。
相信很多人在格式化字符串的時(shí)候都用"%s" % v的語(yǔ)法,PEP 3101 提出一種更先進(jìn)的格式化方法 str.format() 并成為 Python 3 的標(biāo)準(zhǔn)用來(lái)替換舊的 %s 格式化語(yǔ)法,CPython 從 2.6 開(kāi)始已經(jīng)實(shí)現(xiàn)了這一方法(其它解釋器未考證)。
format()新的 format() 方法其實(shí)更像是一個(gè)簡(jiǎn)略版的模板引起(Template Engine),功能非常豐富。
模板中替換變量用 {} 包圍,且由 : 分為兩部分,其中后半部分 format_spec 在后面會(huì)多帶帶討論。
前半部分有三種用法:
空
代表位置的數(shù)字
代表keyword的標(biāo)識(shí)符
這與函數(shù)調(diào)用的參數(shù)類(lèi)別是一致的
print("{} {}".format("Hello", "World")) # 等同于以下幾種 print("{0} {1}".format("Hello", "World")) print("{hello} {world}".format(hello="Hello", world="World")) print("{0}{1}{0}".format("H", "e")) # Hello World # Hello World # Hello World # HeH
除此之外,就像函數(shù)參數(shù)的解包一樣,format() 中也可以直接使用解包操作
print("{author}.{city}".format(**{"author": "Miracle", "city": "上海"})) print("{} {}".format(*["Miracle", "上海"])) Miracle.上海 Miracle 上海
在模板中還可以通過(guò) .identifier 和 [key] 的方式獲取變量?jī)?nèi)的屬性或值(需要注意的是 "{}{}" 相當(dāng)于 "{0}{1}")
data = {"author": "Miracle", "like": "papapa"} print("Author: {0[author]}, Like: {0[like]}".format(data)) langs = ["Python", "Ruby"] print("{0[0]} vs {0[1]}".format(langs)) print(" ==== Help(format):{.__doc__}".format(str.format)) # Name: Python, Score: 100 # Python vs Ruby # ==== # Help(format): # S.format(*args, **kwargs) -> str
強(qiáng)制轉(zhuǎn)換,可以通過(guò) ! + r|s|a 的方式對(duì)替換的變量進(jìn)行強(qiáng)制轉(zhuǎn)換
"{!r}" 對(duì)變量調(diào)用 repr()
"{!s}" 對(duì)變量調(diào)用 str()
"{!a}" 對(duì)變量調(diào)用 ascii()
冒號(hào)之后的部分定義輸出的樣式
align 代表對(duì)齊方向,通常要配合 width 使用,而 fill 則是填充的字符(默認(rèn)為空白):
for align, text in zip("<^>", ["left", "center", "right"]): # 務(wù)必看懂這句話 print("{:{fill}{align}16}".format(text, fill=align, align=align)) print("{:0=10}".format(100)) # = 只允許數(shù)字 # left<<<<<<<<<<<< # ^^^^^center^^^^^ # >>>>>>>>>>>right # 0000000100
同時(shí)可以看出,樣式設(shè)置里面可以嵌套 {} ,但是必須通過(guò) keyword 指定,且只能嵌套一層。
接下來(lái)是符號(hào)樣式:+|-|" " 分別指定數(shù)字是否需要強(qiáng)制符號(hào)(其中空格是指在正數(shù)的時(shí)候不顯示 + 但保留一位空格)
print("{0:+} {1:-} {0: }".format(3.14, -3.14)) # +3.14 # -3.14 # 3.14
用于表示特殊格式的數(shù)字(二進(jìn)制、十六進(jìn)制等)是否需要前綴符號(hào)
逗號(hào)也是用于表示數(shù)字時(shí)是否需要在千位處進(jìn)行分隔
0 相當(dāng)于前面的{:0=} 右對(duì)齊并用 0 補(bǔ)充空位
print("Binary: {0:b} => {0:#b}".format(3)) print("Large Number: {0:} => {0:,}".format(1.25e6)) print("Padding: {0:16} => {0:016}".format(3)) # Binary: 11 => 0b11 # Large Number: 1250000.0 => 1,250,000.0 # Padding: 3 => 0000000000000003
最后小胖給大家介紹一下熟悉的小數(shù)點(diǎn)精度問(wèn)題, .n 和格式化類(lèi)型。
這里僅給出一些示例,詳細(xì)內(nèi)容可以查閱文檔:
from math import pi print("pi = {pi:.2}, also = {pi:.7}".format(pi=pi)) # pi = 3.1, also = 3.141593Integer
for t in "b c d #o #x #X n".split(): print("Type {0:>2} of {1} shows: {1:{t}}".format(t, 97, t=t)) # Type b of 97 shows: 1100001 # Type c of 97 shows: a # Type d of 97 shows: 97 # Type #o of 97 shows: 0o141 # Type #x of 97 shows: 0x61 # Type #X of 97 shows: 0X61 # Type n of 97 shows: 97Float
for t, n in zip("eEfFgGn%", [12345, 12345, 1.3, 1.3, 1, 2, 3.14, 0.985]): print("Type {} shows: {:.2{t}}".format(t, n, t=t)) # Type e shows: 1.23e+04 # Type E shows: 1.23E+04 # Type f shows: 1.30 # Type F shows: 1.30 # Type g shows: 1 # Type G shows: 2 # Type n shows: 3.1 # Type % shows: 98.50%String (default)
try: print("{:s}".format(123)) except: print("{}".format(456)) # 456
關(guān)注公眾號(hào)「Python專(zhuān)欄」,后臺(tái)回復(fù)「騰訊架構(gòu)資源1」,獲取由騰訊架構(gòu)師整理的大數(shù)據(jù)學(xué)習(xí)全套資源包!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43451.html
摘要:采用完全獨(dú)立于任何程序語(yǔ)言的文本格式,使成為理想的數(shù)據(jù)交換語(yǔ)言為什么需要提到,我們就應(yīng)該和來(lái)進(jìn)行對(duì)比。也是一種存儲(chǔ)和交換文本信息的手段。那么好在哪里呢比更小更快,更易解析。使用的時(shí)候,也支持將轉(zhuǎn)成但是,我們不一定使用框架來(lái)做開(kāi)發(fā)呀。 什么是JSON JSON:JavaScript Object Notation 【JavaScript 對(duì)象表示法】 JSON 是存儲(chǔ)和交換文本信息的語(yǔ)法...
摘要:目錄前言架構(gòu)安裝第一個(gè)爬蟲(chóng)爬取有道翻譯創(chuàng)建項(xiàng)目創(chuàng)建創(chuàng)建解析運(yùn)行爬蟲(chóng)爬取單詞釋義下載單詞語(yǔ)音文件前言學(xué)習(xí)有一段時(shí)間了,當(dāng)時(shí)想要獲取一下百度漢字的解析,又不想一個(gè)個(gè)漢字去搜,復(fù)制粘貼太費(fèi)勁,考慮到爬蟲(chóng)的便利性,這篇文章是介紹一個(gè)爬蟲(chóng)框架, 目錄 前言 架構(gòu) 安裝 第一個(gè)爬蟲(chóng):爬取有道翻譯 創(chuàng)建項(xiàng)目 創(chuàng)建Item 創(chuàng)建Spider 解析 運(yùn)行爬蟲(chóng)-爬取單詞釋義 下載單詞語(yǔ)音文件 ...
摘要:豐富的特性還支持通知過(guò)期等等特性。到這個(gè)就說(shuō)明測(cè)試通過(guò)了。主要針對(duì)方法配置,能夠根據(jù)方法的請(qǐng)求參數(shù)對(duì)其進(jìn)行緩存,常用于查詢(xún)操作主要針對(duì)方法配置,能夠根據(jù)方法的請(qǐng)求參數(shù)對(duì)其進(jìn)行緩存,常用于修改操作清空緩存,主要用于刪除操作。 [TOC] Redis簡(jiǎn)介 Redis 是一個(gè)開(kāi)源的使用 ANSI C 語(yǔ)言編寫(xiě)、遵守 BSD 協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value 數(shù)...
摘要:瀏覽器緩存作為性能優(yōu)化的重要一環(huán),對(duì)于前端而言,重要性不言而喻。根據(jù)瀏覽器發(fā)送的修改時(shí)間和服務(wù)端的修改時(shí)間進(jìn)行比對(duì),一致的話代表資源沒(méi)有改變,服務(wù)端返回正文為空的響應(yīng),讓瀏覽器中緩存中讀取資源,這就大大減小了請(qǐng)求的消耗。 瀏覽器緩存作為性能優(yōu)化的重要一環(huán),對(duì)于前端而言,重要性不言而喻。以前總是一知半解的,所以這次好好整理總結(jié)了一下。 1、緩存機(jī)制 首先我們來(lái)總體感知一下它的匹配流程,如...
閱讀 1394·2021-11-24 09:39
閱讀 1380·2021-11-04 16:12
閱讀 2722·2021-09-24 09:47
閱讀 3368·2021-09-01 10:50
閱讀 1508·2019-08-30 15:55
閱讀 1452·2019-08-30 15:43
閱讀 674·2019-08-30 11:08
閱讀 3608·2019-08-23 18:33