成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PyTips 0x0a - Python 字符串的格式化

luqiuwen / 1490人閱讀

摘要:項(xiàng)目地址相信很多人在格式化字符串的時(shí)候都用的語(yǔ)法,提出一種更先進(jìn)的格式化方法并成為的標(biāo)準(zhǔn)用來(lái)替換舊的格式化語(yǔ)法,從開(kāi)始已經(jīng)實(shí)現(xiàn)了這一方法其它解釋器未考證。

項(xiàng)目地址:https://git.io/pytips

相信很多人在格式化字符串的時(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),功能非常豐富,官方文檔對(duì)其語(yǔ)法的描述如下:

"""
replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | integer]
attribute_name    ::=  identifier
element_index     ::=  integer | index_string
index_string      ::=   +
conversion        ::=  "r" | "s" | "a"
format_spec       ::=  
"""
pass # Donot output

我將其準(zhǔn)換成鐵路圖的形式,(可能)更直觀一些:

模板中替換變量用 {} 包圍,且由 : 分為兩部分,其中后半部分 format_spec 在后面會(huì)多帶帶討論。前半部分有三種用法:

代表位置的數(shù)字

代表keyword的標(biāo)識(shí)符

這與函數(shù)調(diào)用的參數(shù)類別是一致的:

print("{} {}".format("Hello", "World"))
# is equal to...
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

除此之外,就像在0x05 函數(shù)參數(shù)與解包中提到的一樣,format() 中也可以直接使用解包操作:

print("{lang}.{suffix}".format(**{"lang": "Python", "suffix": "py"}))
print("{} {}".format(*["Python", "Rocks"]))
Python.py
Python Rocks

在模板中還可以通過(guò) .identifier[key] 的方式獲取變量?jī)?nèi)的屬性或值(需要注意的是 "{}{}" 相當(dāng)于 "{0}{1}"):

data = {"name": "Python", "score": 100}
print("Name: {0[name]}, Score: {0[score]}".format(data)) # 不需要引號(hào)

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

Return a formatted version of S, using substitutions from args and kwargs.
The substitutions are identified by braces ("{" and "}").
強(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()

格式

最后 : 之后的部分定義輸出的樣式:

align 代表對(duì)齊方向,通常要配合 width 使用,而 fill 則是填充的字符(默認(rèn)為空白):

for align, text in zip("<^>", ["left", "center", "right"]):
    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);, 也是用于表示數(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

最后兩個(gè)就是我們熟悉的小數(shù)點(diǎn)精度 .n 和格式化類型了,這里僅給出一些示例,詳細(xì)內(nèi)容可以查閱文檔:

from math import pi
print("pi = {pi:.2}, also = {pi:.7}".format(pi=pi))
pi = 3.1, also = 3.141593

Integer

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: 97

Float

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)注 PyHub!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37830.html

相關(guān)文章

  • PyTips 0x07 - Python 符串

    摘要:項(xiàng)目地址所有用過(guò)的人應(yīng)該都看過(guò)下面兩行錯(cuò)誤信息這就是界的錕斤拷今天和接下來(lái)幾期的內(nèi)容將主要關(guān)注中的字符串字節(jié)及兩者之間的相互轉(zhuǎn)換。 項(xiàng)目地址:https://git.io/pytips 所有用過(guò) Python (2&3)的人應(yīng)該都看過(guò)下面兩行錯(cuò)誤信息: UnicodeEncodeError: ascii codec cant encode characters in position...

    go4it 評(píng)論0 收藏0
  • PyTips 0x11 - Python 時(shí)間與日期

    摘要:項(xiàng)目地址時(shí)間和日期可能涉及到不同的時(shí)區(qū)格式,同時(shí)又經(jīng)常需要作為時(shí)間戳保存,有時(shí)候還需要進(jìn)行一些加減操作,因此處理起來(lái)通常會(huì)因?yàn)榉椒ㄌ喽鵁o(wú)從下手。中與時(shí)間和日期相關(guān)的標(biāo)準(zhǔn)庫(kù)有個(gè)和。 項(xiàng)目地址:https://git.io/pytips 時(shí)間和日期可能涉及到不同的時(shí)區(qū)、格式,同時(shí)又經(jīng)常需要作為時(shí)間戳保存,有時(shí)候還需要進(jìn)行一些加減操作,因此處理起來(lái)通常會(huì)因?yàn)榉椒ㄌ喽鵁o(wú)從下手。Python...

    2501207950 評(píng)論0 收藏0
  • PyTips 0x08 - Python 字節(jié)與字節(jié)數(shù)組

    摘要:回到對(duì)字節(jié)和字節(jié)數(shù)組的定義為了用計(jì)算機(jī)可以理解的數(shù)字描述人類使用的字符,我們需要一張數(shù)字與字符對(duì)應(yīng)的表。由于和字符串一樣是序列類型,字節(jié)和字節(jié)數(shù)組可用的方法也類似,這里就不一一列舉了。 項(xiàng)目地址:https://git.io/pytips 0x07 中介紹了 Python 中的字符串類型,字符串類型是對(duì)人類友好的符號(hào),但計(jì)算機(jī)只認(rèn)識(shí)一種符號(hào),那就是二進(jìn)制(binary)數(shù),或者說(shuō)是數(shù)字...

    Leo_chen 評(píng)論0 收藏0
  • PyTips 0x16 - Python 迭代器工具

    摘要:借鑒了中的某些迭代器的構(gòu)造方法,并在中實(shí)現(xiàn)該模塊是通過(guò)實(shí)現(xiàn),源代碼。 項(xiàng)目地址:https://git.io/pytips 0x01 介紹了迭代器的概念,即定義了 __iter__() 和 __next__() 方法的對(duì)象,或者通過(guò) yield 簡(jiǎn)化定義的可迭代對(duì)象,而在一些函數(shù)式編程語(yǔ)言(見(jiàn) 0x02 Python 中的函數(shù)式編程)中,類似的迭代器常被用于產(chǎn)生特定格式的列表(或序列)...

    mayaohua 評(píng)論0 收藏0
  • PyTips 0x01 - 迭代器與生成器

    摘要:項(xiàng)目地址迭代器與生成器迭代器與生成器是中比較常用又很容易混淆的兩個(gè)概念,今天就把它們梳理一遍,并舉一些常用的例子。生成器前面說(shuō)到創(chuàng)建迭代器有種方法,其中第三種就是生成器。 項(xiàng)目地址:https://git.io/pytips 迭代器與生成器 迭代器(iterator)與生成器(generator)是 Python 中比較常用又很容易混淆的兩個(gè)概念,今天就把它們梳理一遍,并舉一些常用的例...

    chemzqm 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<