99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网
Swift
編程
Swift51.com
首頁
社區(qū)
▼
資訊
問答
分享
建議
開源代碼
Xcode下載
Swift教程
hot
登錄
注冊
當前位置:
首頁
> 分享
歡迎加入QQ討論群258996829
蘋果6袋
6
麥子學院
Python字符串如何實現(xiàn)格式化?
發(fā)布時間:2017-03-27 12:02 回復:0 查看:2274 最后回復:2017-03-27 12:02
本文和大家分享的主要是
python開發(fā)
中字符串格式化相關內(nèi)容,一起來看看吧,希望對大家學習和使用python字符串有所幫助。
Python2.6+ 增加了str.format函數(shù),用來代替原有的'%'操作符。它使用比'%'更加直觀、靈活。下面詳細介紹一下它的使用方法。
下面是使用'%'的例子:
"""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是不是?由于'%'是一個操作符,只能在左右兩邊各放一個參數(shù),因此右邊多個值需要用元組或者字典來包括,不能元組字典一起用,缺乏靈活度。
同樣的例子用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'
是不是很直觀?(當然,使用C語言的我也很喜歡前一種格式表達方式 :-) )
格式化字符串
"{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 :-{}'
注意第一行的'\',如果一個語句要換行,必須在結尾加上反斜線轉義。
用'%'無法像這樣將元組和字典混用。其實這里是命名參數(shù),Python的一個特性??梢栽诙x數(shù)組的時候用*args, **kwargs語法展開集合和字典。需要注意,命名參數(shù)放在后面。
第二個語句表示format內(nèi)置函數(shù)用來格式化單個值。
第三個語句表示了{}的轉義,因為{}在被格式化字符串里是特殊字符,不能直接顯示。轉義方式是多嵌套一層。
使用屬性和索引
"My name is {0.name}".format(open('out.txt', 'w')) # => 'My name is out.txt'
'{0.name}' 相當于調(diào)用對象的屬性 open('out.txt', 'w').name
"My name is {0[name]}".format(dict(name='Fred')) # => 'My name is Fred'
使用索引也是可以的。
obj[key] 相當于 obj.____getitem____('key')
標準說明符(Specifiers)
寫過C語言的程序員應該清楚printf的復雜。format也定義了很多標準的說明符,用來解釋一個值的格式,然后插入字符串內(nèi)。例如:
"My name is {0:8}".format('Fred') # => 'My name is Fred '
':'之后便是說明符了,上面例子中說明符只有一個'8'(minimumwidth),它表示插入的值寬度至少為8。'Fred'只有4,所以又加了4個空格。
說明符的詳細格式為:
[[fill]align][sign][#][0][minimumwidth][.precision][type]
(不比C的printf更簡潔啊!)
注意:'[]'表示該元素可選。所以,所有的格式說明符都是可選的!就像之前的例子,幾乎都沒有用這個(只是為了例子更清晰)。實際上,這些是很有用的。
我們一個個來看:
· [fill]align 表示排列方式。當minimumwidth設置的比插入的值大時,就有了留白,就像上一個例子中的 'My name is Fred ' 。默認把留白放在了右邊,也就是說插入值默認是左對齊的。如果我們試試{0:>8},會發(fā)現(xiàn)結果變成了 'My name is Fred' 。
fill 表示用來填充留白的字符。 只有在align指定了的情況下fill才有用! align可以是下面的標識:
· < 左對齊,默認
· > 右對齊
· = 將留白放在align標識后面,只對數(shù)字有效。什么意思呢?align下面會講到,顯示數(shù)字的正負號,同樣只對數(shù)字有效。如果指定了' = ',那么就會把數(shù)字的正負號顯示在留白的前面。例如: format(-12, "0=8") # => '-0000012' 注意這里用的是格式化單個值的內(nèi)置函數(shù)format。' 0 '是fill元素,用它來填充留白;' = '就是該標識了;' 8 '是指最小寬度為8,因此才有5個留白。那么align呢?align其實就是說明正負號的顯示方式,這里使用默認的' -',之后會講到。
· ^ 居中對齊
· sign 數(shù)字符號,只對數(shù)字有效。
· + 顯示加號和減號
· - 不顯示加號,顯示減號。在不指定最小寬度的情況下負數(shù)總是比正數(shù)多占一個符號位置。默認
· ' ' (一個空格) 用一個留白代替加號
· # 顯示數(shù)字的前綴表示幾進制(0b, 0o, 0x)
· 0 用'0'填充留白。
· minimumwidth 指定最小寬度,已經(jīng)用過很多次了。
· .precision 'precision'是一個十進制數(shù)字,表示顯示小數(shù)點后幾位。
· type 值的類型:
· 整型:
· b 二進制
· c 字符型,把數(shù)字轉成表示unicode的字符
· d 十進制
· o 八進制
· x 十六進制,顯示小寫字母
· X 十六進制,顯示大寫字母
· n 與 d 行為相同,使用本地的數(shù)字表示方式
· ''(空,沒有空格) 與 d 相同
· 浮點數(shù)
· e 科學計數(shù)法表示,小寫e
· E 科學計數(shù)法表示,大寫E
· f 顯示為定點數(shù),默認小數(shù)點后六位
· F 同 f
· g 自動選擇是否用科學記數(shù)法表示
· G 同 g
· n 同 g ,使用本地表示方式
· % 使用百分比表示
· ''(空) 同 g
每個對象可以重寫自己的格式化說明符,例如datatime類重寫了后可以這樣表示:
"Today is: {0:%a %b %d %H:%M:%S %Y}".format(datetime.now())
預先轉換
':'之后是格式說明符,之前還可以加預先轉換的標識
· !r 調(diào)用對象的_ repr _方法來轉換成標準字符串
· !s 調(diào)用對象的_ str _方法來轉換成字符串
重寫_ format _方法
我們在格式化一個字符串時,首先格式化每個值,然后再插入字符串內(nèi)。格式化值調(diào)用的就是format內(nèi)置方法。format則是簡單地調(diào)用該值的_ format _方法。
def format(value, format_spec):
return value.__format__(format_spec)
在object類內(nèi)實現(xiàn)了_ format 方法,只是將本身用str()轉換成字符串,然后將字符串傳入內(nèi)置的format方法,實際上就是調(diào)用轉換為字符串后的 format _方法。
class object:
def __format__(self, format_spec):
return format(str(self), format_spec)
int/float/str自身實現(xiàn)了_ format _方法,前面已經(jīng)介紹了它們各自的說明符。
結束語
還有一點兒是自定義Formatter,不過平常也用不到。留作下篇string模塊源碼解讀的內(nèi)容吧。建議有興趣的朋友多看看Python標準庫的源碼,很有學習價值。
來源:博客園
取消引用
您還未登錄,
請先登錄
提 問
熱門帖子
iDev 全平臺開發(fā)者大會門票免費送!限量10張!
蘋果Mac Pro垃圾桶 最低配的ME253CH
本人想買個蘋果電腦搞開發(fā),哪位大俠指點下
求助:failable initializer 'init(name:)' cannot override a non-failable initializer
為慶祝Swift發(fā)布1個月,雨燕社區(qū)正式上線。
在UITextFeild里輸入數(shù)據(jù),這個數(shù)據(jù)怎么做加減乘除?
Swift 高仿喜馬拉雅FM
要成為自由職業(yè)者?先要學會蘋果的Swift哦
用swift實現(xiàn)的調(diào)用系統(tǒng)相機,相冊的DEMO
關于嵌入式引用\()
Swift 教程
最新帖子
swift_5.3可以更新了
swift如何實現(xiàn)左滑刪除
IBM Swift Sandbox訪問
Thread 18: Fatal error: 'try!' expression unexpectedly raised an error: Error
跟隨手勢滑動的ScrollableTextField
Swift5.0什么時候出
什么時候出5.0
PerfectTemplate 無法編譯
WWDC19 蘋果宣布全新 UI 框架 SwiftUI
水平滾動視圖Carousel
Xcode 9.4下載
?
Copyright © 2017 Swift 編程 版權所有
推動 Swift 成為最受歡迎的編程語言!
友鏈、商務合作:service??swift51.com
手機版