1. 程式人生 > >string.format()方法與例項

string.format()方法與例項

選項 含義
'<' 強制欄位在可用空間內左對齊(這是大多數物件的預設值)。
'>' 強制欄位在可用空間內右對齊(這是數字的預設值)。
'=' 強制將填充放置在符號(如果有)之後但在數字之前。這用於以“+000000120”形式列印欄位。此對齊選項僅對數字型別有效。當'0'緊接在欄位寬度之前時,它成為預設值。
'^' 強制欄位在可用空間內居中。
選項 含義
'+' 表示標誌可以用於正數和負數。
'-' 表示標誌應僅用於負數(這是預設行為)。
空格 表示應在正數上使用前導空格,在負數上使用減號。
型別 含義
's' 字串格式。這是字串的預設型別,可以省略。
None 's'
型別 含義
'b' 二進位制格式。輸出基數2中的數字。
'c' 字元。在列印之前將整數轉換為相應的unicode字元。
'd' 十進位制整數。輸出基數為10的數字。
'o' 八進位制格式。輸出基數為8的數字。
'x' 十六進位制格式 輸出基數為16的數字,使用小寫字母表示9以上的數字。
'X' 十六進位制格式 輸出基數16中的數字,使用大寫字母表示9以上的數字。
'n' 數。'd'除了它使用當前語言環境設定插入適當的數字分隔符之外,它是相同的
None 'd'
型別 含義
'e' 指數表示法。使用字母“e”以科學記數法列印數字以表示指數。預設精度為6
'E' 指數表示法。'e'使用大寫字母“E”作為分隔符的情況相同。
'f' 定點表示法。將數字顯示為定點數。預設精度為6
'F' 定點表示法。'f',但轉換 nanNANinfINF
'g'

一般格式。對於給定的精度,將數字舍入為有效數字,然後根據其大小以定點格式或科學計數法格式化結果。p >= 1p

精確的規則如下:假設使用表示型別'e'和精度格式化的結果p-1將具有指數exp然後,如果,數字格式化為簡報型別和精度。否則,使用表示型別和精度格式化數字在這兩種情況下,從有效數字中刪除不重要的尾隨零,如果後面沒有剩餘數字,則也會刪除小數點。-4 <= exp < p'f'p-1-exp'e'p-1

正和負無窮大,正的和負的零,和NaN,被格式化為inf-inf0-0nan的分別,而不管精度。

精度0被視為等於精度1。預設精度為6

'G' 一般格式。'g'切換到相同'E'如果數字太大。無窮大和NaN的表示也是大寫的。
'n' 數字。'g'除了它使用當前語言環境設定插入適當的數字分隔符之外,它是相同的
'%' 百分比。將數字乘以100並以固定('f')格式顯示,後跟百分號。
None 類似於'g',除了定點表示法,使用時,至少有一位數字超過小數點。預設精度與表示特定值所需的一樣高。總體效果是匹配str()由其他格式修飾符更改的輸出
>>>
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated
'abracadabra'
按名稱訪問引數:

>>>
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
訪問引數的屬性:

>>>
>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
...  'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
...     def __init__(self, x, y):
...         self.x, self.y = x, y
...     def __str__(self):
...         return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'
訪問引數的專案:

>>>
>>> coord = (3, 5)
>>> 'X: {0[0]};  Y: {0[1]}'.format(coord)
'X: 3;  Y: 5'
更換%s並%r:

>>>
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
對齊文字並指定寬度:

>>>
>>> '{:<30}'.format('left aligned')
'left aligned                  '
>>> '{:>30}'.format('right aligned')
'                 right aligned'
>>> '{:^30}'.format('centered')
'           centered           '
>>> '{:*^30}'.format('centered')  # use '*' as a fill char
'***********centered***********'
更換%+f,%-f以及與指定的標誌:% f

>>>
>>> '{:+f}; {:+f}'.format(3.14, -3.14)  # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14)  # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14)  # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
替換%x並將%o值轉換為不同的基數:

>>>
>>> # format also supports binary numbers
>>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
'int: 42;  hex: 2a;  oct: 52;  bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)
'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'
使用逗號作為千位分隔符:

>>>
>>> '{:,}'.format(1234567890)
'1,234,567,890'
表達百分比:

>>>
>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'
使用特定於型別的格式:

>>>
>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
巢狀引數和更復雜的示例:

>>>
>>> for align, text in zip('<^>', ['left', 'center', 'right']):
...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12): 
...     for base in 'dXob':
...         print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
...     print()
...
    5     5     5   101
    6     6     6   110
    7     7     7   111
    8     8    10  1000
    9     9    11  1001
   10     A    12  1010
   11     B    13  1011