Python數(shù)據(jù)類型概覽
python3中有六個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型降盹,分別為:①Number(數(shù)字)伺帘;②String(字符串);③List(列表)缀台;④Tuple(元組);⑤Sets(集合)哮奇;⑥D(zhuǎn)ictionary(字典)膛腐。
根據(jù)能否更改這些類型變量的值睛约,可以把這六個(gè)標(biāo)準(zhǔn)類型劃分為兩類:
第一類:不可變數(shù)據(jù)(四個(gè)):Number(數(shù)字)、String(字符串)哲身、Tuple(元組)辩涝、Sets(集合);
第二類:可變數(shù)據(jù)(兩個(gè)):List(列表)勘天、Dictionary(字典)怔揩。
根據(jù)不同類型的數(shù)據(jù)內(nèi)的元素是否有順序,還可以劃分兩類:
第一類:有序序列:列表脯丝,元組商膊,字符串;
第二類:無序序列:字典宠进,集合翘狱。
變量的賦值
Python中變量要遵循一定的規(guī)則,例如不得以數(shù)字開頭砰苍,不得以Python關(guān)鍵字作為變量。此外阱高,Python還提供了一個(gè)函數(shù)用于判斷一個(gè)字符串能否作為變量的名稱赚导,即isidentifier()
,如下所示:
>>> 'abc'.isidentifier()
True
>>> '3abc'.isidentifier()
False
常規(guī)賦值操作
Python使用等號(hào)(=)給變量賦值赤惊,等號(hào)(=)運(yùn)算符左邊是一個(gè)變量名,等號(hào)(=)運(yùn)算符右邊是存儲(chǔ)在變量中的值吼旧,如下所示:
biotest@biotest-VirtualBox:~/python3/01basic$ cat variable.py
#!/usr/bin/python3
counter = 100
miles = 1000.00
name = "runoob"
print(counter)
print(miles)
print(name)
biotest@biotest-VirtualBox:~/python3/01basic$ python3 variable.py
100
1000.0
runoob
多變量賦值
Python可以同時(shí)對(duì)多個(gè)變量進(jìn)行賦值,如下所示:
a = b = c =1
或者像這樣:
a, b, c = 1, 2, "runoob"
這種賦值試方式未舟,就是相當(dāng)于a = 1, b = 2, c = "runoob"
圈暗。
判斷是否是同一個(gè)對(duì)象——is
兩個(gè)變量是否指向的是同一個(gè)對(duì)象,可以用is 運(yùn)算符裕膀,如下所示:
>>> a = 'banana'
>>> b = 'banana'
>>> a is b
True
>>> b is a
True
Number(數(shù)字)
類型判斷函數(shù)type()
Python3中的數(shù)字類型具體包括int(整型)
员串,float(浮點(diǎn)型)
,bool(布爾型)
和complex(復(fù)數(shù)型)
這四種昼扛。使用內(nèi)置的type()
函數(shù)可以查看對(duì)象的類型寸齐,如下所示:
>>> a, b, c, d = 20, 5.5, True, 4+4j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
>>>
類型判斷函數(shù)instance()
還可以通過instance
函數(shù)來判斷,這個(gè)函數(shù)的使用格式為instance(a,b)
抄谐,即判斷a是否是b的一個(gè)實(shí)例渺鹦,如下所示:
>>> a = 111
>>> isinstance(a, int)
True
>>> isinstance(a, float)
False
isinstance
和type()
的區(qū)別可以通過一些代碼來看:
biotest@biotest-VirtualBox:~/python3/01basic$ cat type_instance_diff.py
#!usr/bin/python3
class A:
pass
class B(A):
pass
print(isinstance(A(),A))
print(type(A()) == A)
print(isinstance(B(),A))
print(type(B()) == A)
biotest@biotest-VirtualBox:~/python3/01basic$ python3 type_instance_diff.py
True
True
True
False
區(qū)別就是,type()
認(rèn)為子類與父類不是一個(gè)類型蛹含,isinstance()
認(rèn)為子類與父類是一個(gè)類型毅厚。
字符串轉(zhuǎn)換為整型
不同類型的變量有時(shí)候會(huì)出現(xiàn)錯(cuò)誤,如下所示:
>>> num = 1
>>> string = '1'
>>> print(num + string)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
因此浦箱,只要在一段代碼中要涉及不同類型的變量吸耿,最好使用type()
函數(shù)來查看一下數(shù)據(jù)類型祠锣。如果不同,有時(shí)候需要進(jìn)行類型轉(zhuǎn)換珍语,如下所示:
>>> num = 1
>>> string = '1'
>>> num2 = int(string)
>>> print(num +num2)
2
變量的刪除
變量的刪除使用del
函數(shù)锤岸。
字符串
字符串的訪問
字符串就是一串有序的字符。你可以通過方括號(hào)操作符板乙,每次去訪問字符串中的一個(gè)字符是偷,如下所示:
>>> fruit = 'banana'
>>> letter = fruit[1]
>>> letter
'a'
其中[1]是索引,用于指示字符串中字符的位置募逞,python中第1個(gè)位置是[0]蛋铆,而非[1]。
字符串的長(zhǎng)度
len
是一個(gè)內(nèi)置函數(shù)放接,會(huì)返回一個(gè)字符串中字符的長(zhǎng)度:
>>> len(fruit)
6
>>> len(letter)
1
>>> fruit[len(fruit)-1] #返回fruit的最后一個(gè)字母
'a'
字符串的加法
字符串的加法就是將字符串連接起來刺啦,如下所示:
>>> what_he_does = ' plays '
>>> his_instrument = 'guitar'
>>> his_name = 'Robert Johnson'
>>> artist_intro = his_name + what_he_does + his_instrument
>>> print(artist_intro)
Robert Johnson plays guitar
字符串無法修改
字符串屬于不可變序列,無法進(jìn)行修改纠脾,如下所示:
>>> greeting = 'Hello, world!'
>>> greeting[0] = 'J'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
但是可以新建一個(gè)字符串玛瘸,如下所示:
>>> greeting = 'Hello, world!'
>>> new_greeting = 'J' + greeting[1:]
>>> print(new_greeting)
Jello, world!
在Python中處理這類無法修改的數(shù)據(jù)類型時(shí),通常的做法就是提取相應(yīng)的字符串苟蹈,然后再新建一個(gè)糊渊。
字符串的切片與索引
先看一個(gè)案例,如下所示:
>>> name = 'My name is Mike'
>>> print(name[0]) # 切下第0個(gè)元素
M
>>> print(name[-4]) # 切下倒數(shù)第4個(gè)元素
M
>>> print(name[11:14]) # 切下第11到第14個(gè)元素慧脱,左閉右開區(qū)間
Mik
>>> print(name[11:15]) # 切下第11到第15個(gè)元素渺绒,左閉右開區(qū)間
Mike
>>> print(name[5:]) # 從第5個(gè)元素開始切,一直到結(jié)尾
me is Mike
>>> print(name[:5]) # 從第0個(gè)元素開始切菱鸥,不包括第5個(gè)元素宗兼,左閉右開區(qū)間
My na
字符串每個(gè)字符對(duì)應(yīng)的索引:
[圖片上傳失敗...(image-8ec9db-1551584517626)]
再看另外一個(gè)案例,下面的這個(gè)案例中使用了幾個(gè)參數(shù)氮采,如下所示:
>>> b = 'ACTGCATCATC'
>>> b[0:3] # 截取0到3元素
'ACT'
>>> b[2:4] # 截取2到4元素
'TG'
>>> b[2:-1] # 截取第2到最后一個(gè)元素
'TGCATCAT'
>>> b[2:] # 截取第2到最后一個(gè)元素
'TGCATCATC'
>>> b[::-1] # #創(chuàng)造一個(gè)與原字符串順序相反的字符串
'CTACTACGTCA'
>>> b[-3:-1] #截取倒數(shù)第三位與倒數(shù)第一位之前的字符
'AT'
>>> b[-3:] #截取倒數(shù)第三位到結(jié)尾
'ATC'
>>> b[:-5:-3] #逆序截取
'CC'
>>> b[::2] # 隔一個(gè)取一個(gè)元素的操作
'ATCTAC'
>>> b[0:6:2] # 截取第0到第6個(gè)元素殷绍,然后再間隔1個(gè)取元素
'ATC'
>>> b[9:0:-3] # 截取第0到第9個(gè)元素,然后倒序間隔取3個(gè)元素
'TTG'
>>>
字符串的分割
這里要與字符串的切片區(qū)分扳抽,字符串的分割使用的是split()
篡帕,如下所示:
>>> s = 'pining for the fjords'
>>> t = s.split()
>>> t
['pining', 'for', 'the', 'fjords']
可選的參數(shù)是定界符,是用來確定單詞邊界的贸呢。下面這個(gè)例子中就是把連接號(hào)-
作為定界符:
>>> s = 'spam-spam-spam'
>>> delimiter = '-'
>>> t = s.split(delimiter)
>>> t
['spam', 'spam', 'spam']
字符串的拼接
join是與split功能相反的一個(gè)方法镰烧。它接收一個(gè)字符串列表,然后把所有元素拼接到一起楞陷。join是一個(gè)字符串方法怔鳖,所以必須把 join放到定界符后面來調(diào)用,并且傳遞一個(gè)列表作為參數(shù):
>>> t = ['pining','for','the','fjords']
>>> delimiter = ' '
>>> s = delimiter.join(t)
>>> s
'pining for the fjords'
替換某字符串
這里用到了字符串的replace()方法固蛾,這個(gè)方法是用某個(gè)字符替換某個(gè)字符结执,雖然是替換度陆,但是原字符是不變的,只是將替換后的字符賦值給了一個(gè)新的變量献幔,如下所示:
>>> phone_number = '1386-666-0006'
>>> hiding_number = phone_number.replace(phone_number[:9],'*'*9)
>>> print(hiding_number)
*********0006
字符串計(jì)數(shù)
下面的這段代碼是統(tǒng)計(jì)在banana
這個(gè)單詞有多少個(gè)a懂傀,如下所示:
>>> word = "banana"
>>> count = 0
>>> for letter in word:
... if letter == 'a':
... count = count + 1
...
>>> print(count)
3
除了函數(shù)形式外,還可以使用count()
方法蜡感,如下所示:
>>> word = "banana"
>>> word.count('a')
3
查詢字符串
查詢字符常用的方法是find()
蹬蚁,rfind()
,index()
郑兴。其中犀斋,find()
與rfind(
)的區(qū)別在于,一個(gè)是在左邊開始查找情连,一個(gè)在右邊開始查找(r就是right的意思)叽粹,index()
法檢測(cè)字符串中是否包含子字符串str
,如果指定beg
(開始) 和end
(結(jié)束) 范圍却舀,則檢查是否包含在指定范圍內(nèi)虫几,該方法與 python find()方法一樣,只不過如果str不在 string中會(huì)報(bào)一個(gè)異常挽拔。find()
與rfind()
查找一個(gè)字符串在另一個(gè)字符串指定范圍(默認(rèn)是整個(gè)字符串)中首次出現(xiàn)的位置持钉,如果不存在,返回-1篱昔,存在返回1,如下所示:
>>> s = 'apple, peach, banana, peach, pear'
>>> s.find("peach")
7
>>> s = 'apple, peach, banana, peach, pear'
>>> s.find("peach") # 返回第一次出現(xiàn)的位置
7
>>> s.find("peach",7) # 在指定位置開始查找
7
>>> s.find("peach",7,20) # 在指定范圍內(nèi)進(jìn)行查找
7
>>> s.rfind('p') # 從字符串尾部向前查找
29
>>> s.index('p') # 返回首次出現(xiàn)的位置
1
>>> s.index('pe')
7
>>> s.index('pear')
29
>>> s.index('ppp') # 指定子字符串不存在時(shí)拋出異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
再看一個(gè)查詢電話號(hào)碼的案例:
>>> search = '168'
>>> num_a = '1386-168-0006'
>>> num_b = '1681-222-0006'
>>> print(search + ' is at ' + str(num_a.find(search)) + ' to '+str(num_a.find(search) + len(search)) + ' of num_a')
168 is at 5 to 8 of num_a
>>> print(search + ' is at ' + str(num_b.find(search)) + ' to '+str(num_b.find(search) + len(search)) + ' of num_b')
168 is at 0 to 3 of num_b
查詢某字母
方法與前面的類似始腾,如下所示:
>>> word = 'banana'
>>> index = word.find('a')
>>> print(index)
1
in運(yùn)算
in 這個(gè)詞在字符串操作中是一個(gè)布爾操作符州刽,它讀取兩個(gè)字符串,如果前者的字符串為后者所包含浪箭,就返回真穗椅,否則為假:
>>> 'a' in 'banana'
True
>>> 'seed' in 'banana'
False
刪除字符串中的空格
使用的strip()
方法,如下所示:
>>> mybag = [' glass',' apple','green leaf ']
>>> #有的前面有空格奶栖,有的后面有空格
... print([one.strip() for one in mybag])
['glass', 'apple', 'green leaf']
>>> #去掉元素前后的空格
... ['glass', 'apple', 'green leaf']
['glass', 'apple', 'green leaf']
遍歷所有字符串
使用的是for循環(huán)匹表,第一種方法,使用索引宣鄙,如下所示:
>>> index = 0
>>> fruit = "banana"
>>>
>>> while index < len(fruit):
... letter = fruit[index]
... print(letter)
... index = index +1
...
b
a
n
a
n
a
第二種方法袍镀,直接使用字符串,如下所示:
>>> fruit = "banana"
>>> for letter in fruit:
... print(letter)
...
b
a
n
a
n
a
字符串的復(fù)制
直接使用乘法就行冻晤,如下所示:
>>> words = 'word'*4
>>> print(words)
wordwordwordword
wordwordwordword
字符串的 大小轉(zhuǎn)換苇羡,首字母大寫
符串提供了一些方法,這些方法能夠進(jìn)行很多有用的操作鼻弧。方法和函數(shù)有些類似设江,也接收參數(shù)然后返回一個(gè)值锦茁,但語(yǔ)法稍微不同。比如叉存,upper
這個(gè)方法就讀取一個(gè)字符串码俩,返回一個(gè)全部為大寫字母的新字符串。與函數(shù)的upper(word)
語(yǔ)法不同歼捏,方法的語(yǔ)法是word.upper()
稿存。后面括號(hào)里面是空白的,表示這個(gè)方法不接收參數(shù)甫菠,如下所示:
>>> word = 'banana'
>>> new_word = word.upper()
>>> print(new_word)
BANANA
upper()方法是大寫挠铲,lower()是小寫,capitalize()首字母大寫寂诱、title()將每個(gè)字母變?yōu)榇髮懛髌唬瑂wapcase()大小寫互換,如下所示:
>>> s = "What is Your Name?"
>>> s.lower()
'what is your name?'
>>> s.upper()
'WHAT IS YOUR NAME?'
>>> s.capitalize()
'What is your name?'
>>> s.swapcase()
'wHAT IS yOUR nAME?'
ASCII值的轉(zhuǎn)換
ord()是一個(gè)內(nèi)建函數(shù)痰洒,能夠返回某個(gè)字符(注意瓢棒,是一個(gè)字符,而不是多個(gè)字符組成的串)丘喻,所對(duì)應(yīng)的ASCII值(是十進(jìn)制的)脯宿,字符a在ASCII中的值是97,空格在ASCII中也有值泉粉,是32连霉,反過來,根據(jù)整數(shù)值得到的相應(yīng)字符嗡靡,可以使用chr()跺撼,如下所示:
>>> print(ord('a'))
97
>>> print(chr(97))
a
>>> print(chr(98))
b
轉(zhuǎn)義字符
轉(zhuǎn)義字符是指,在字符串中某些特定的符號(hào)前加一個(gè)斜線之后該字符將被解釋為另外一種含義讨彼,不再表示本來的字符歉井,常見的轉(zhuǎn)義字符如下所示:
轉(zhuǎn)義字符 | 含義 |
---|---|
\b |
退格,把光標(biāo)移動(dòng)到前一列位置 |
\f |
換頁(yè)符 |
\n |
換行符 |
\r |
回車 |
\t |
水平制表符 |
\v |
垂直制表符 |
\\ |
一個(gè)\ |
\' |
單引號(hào) |
\" |
雙引號(hào) |
\ooo |
3位八制對(duì)應(yīng)的字符 |
\xhh |
2位十六進(jìn)制對(duì)應(yīng)的字符 |
\uhhhh |
4位十六進(jìn)制數(shù)表示的Unicode字符 |
使用案例如下所示:
>>> print('Hello\nWorld')
Hello
World
>>> oct(65)
'0o101'
>>> print('\101') # 3位八進(jìn)制數(shù)對(duì)應(yīng)的字符
A
>>> hex(65)
'0x41'
>>> print('\x41') # 2位十六進(jìn)制數(shù)對(duì)應(yīng)的字符
A
>>> ord('張')
24352
>>> hex(_)
'0x5f20'
>>> print('\u8463') # 4位十六進(jìn)制數(shù)表示的Unicode字符
董
eval函數(shù)
eval()是一具內(nèi)置變數(shù)哈误,它可以將任意字符串轉(zhuǎn)化為Python表達(dá)式哩至,并進(jìn)行求值。
>>> eval("3+4") # 計(jì)算表達(dá)式的值
7
>>> a = 3
>>> b = 5
>>> eval('a+b') # 這時(shí)候要求變量a和b都已經(jīng)存在
8
>>>
判斷某字符串的開頭或結(jié)尾
startswith()蜜自,endswith()用于判斷字符串是否以指定字符串開始或結(jié)束菩貌,可以接收兩個(gè)整數(shù)參數(shù)來限定字符串的檢測(cè)范圍,如下所示:
>>> s = 'Beautiful is better than ugly'
>>> s.startswith('Be') # 檢測(cè)整個(gè)字符串
True
>>> s.startswith('Be',5) # 指定檢測(cè)范圍的起始位置
False
>>> s.startswith('Be',0,5) # 指定檢測(cè)范圍的起始和結(jié)束位置
True
>>>
判斷字符串的首個(gè)字符內(nèi)容
isalnum()重荠,isalpha()菜谣,isdigit(),isdecimal(),isnumeric()尾膊,isspace()媳危,isupper(),islower()用于檢測(cè)字符串是否為數(shù)字或字母冈敛,是否為字母待笑,是否為數(shù)字字符,是否為空白字符抓谴,是否為大寫字母以及是否為小寫字母暮蹂,如下所示:
>>> '1234abcd'.isalnum()
True
>>> '1234abcd'.isalpha() # 全部為英文字母時(shí)返回True
False
>>> '1234abcd'.isdigit() # 全部為數(shù)字時(shí)返回True
False
>>> 'abcd'.isalpha()
True
>>> '1234.0'.isdigit()
False
>>> '1234'.isdigit()
True
>>> '九'.isnumeric() # isnumeric()方法支持漢字?jǐn)?shù)字
True
>>> '99'.isnumeric()
True
>>> '九'.isdigit()
False
>>> '九'.isdecimal()
False
輸出格式美化
Python兩種輸出值的方式:表達(dá)式語(yǔ)句和print()
函數(shù)。 第三種方式是使用文件對(duì)象的write()
方法癌压,標(biāo)準(zhǔn)輸出文件可以用sys.stdout
引用仰泻,write()
方法在處理文本文件的時(shí)候經(jīng)常使用,如果你希望輸出的形式更加多樣滩届,可以使用str.format()
函數(shù)來格式化輸出值集侯,如果希望將輸出的值轉(zhuǎn)成字符串,可以使用repr()
或str()
函數(shù)來實(shí)現(xiàn)帜消。 這兩個(gè)函數(shù)區(qū)別如下所示:
-
str()
:函數(shù)返回一個(gè)用戶易讀的表達(dá)形式棠枉。 -
repr()
:產(chǎn)生一個(gè)解釋器易讀的表達(dá)形式。
輸出格式案例1:
如下所示:
>>> str(s)
'Hello Runoob'
>>> print(type(str(s)))
<class 'str'>
>>> print(type(s))
<class 'str'>
>>> repr(s)
"'Hello Runoob'"
>>> print(type(repr(s)))
<class 'str'>
>>> str(1/7)
'0.14285714285714285'
>>> x = 10*3.25
>>> y=200*200
>>> s = 'The value of x is: ' + repr(x) + ',the value of y is: ' + repr(y) + '...'
>>> print(s)
The value of x is: 32.5,the value of y is: 40000...
>>> hello = 'hello, runoob\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, runoob\n'
>>> repr((x,y,('Google', 'Runoob')))
"(32.5, 40000, ('Google', 'Runoob'))"
輸出格式案例2
下面的代碼輸出一個(gè)平方與立方根泡挺,如下所示:
>>> for x in range(1,5):
... print(repr(x).rjust(2),repr(x*x).rjust(3),end=' ')
# 使用print添加空格辈讶,即end=' '
# rjust()表示字符串靠右,并在左邊填充空格
... print(repr(x*x*x).rjust(4))
...
1 1 1
2 4 8
3 9 27
4 16 64
>>> for x in range(1,5):
... print('{0:2d} {1:3d}{2:4d}'.format(x,x*x,x*x*x))
...
1 1 1
2 4 8
3 9 27
4 16 64
輸出格式案例第3:
zfill方法表示在數(shù)字的左邊填充0娄猫,如下所示:
>>> '12'.zfill(5)
'00012'
>>> '-3.14'.zfill(7)
'-003.14'
>>> '3.14159265359'.zfill(5)
'3.14159265359'
字符串輸出的格式化
字符串的格式化輸出有兩種方式贱除,一種是使用%
符號(hào),另外一種是使用str.format()
媳溺,下面是使用的一些案例:
>>> print("{:,}".format(123456))
#輸出1234,56
123,456
>>> print("{a:w^8}".format(a="8"))
#輸出www8wwww
www8wwww
>>> print("%.5f" %5)
#輸出5.000000
5.00000
>>> print("%-7s3" %("python"))
#輸出python 3
python 3
>>> print("%.3e" %2016)
#輸出2.016e+03,也可以寫大E
2.016e+03
>>> print("%d %s" %(123456,"myblog"))
#輸出123456 myblog
123456 myblog
>>> print("%(what)s is %(year)d" % {"what":"this year","year":2016})
#輸出this year is 2016
this year is 2016
>>> print("{0}{1}".format("hello","fun"))
#輸出hellofun,這與CSharp的格式化字符(占位符)相似
hellofun
>>> print("{}{}{}".format("spkk",".","cn"))
#輸出spkk.cn
spkk.cn
>>> print("{a[0]}{a[1]}{a[2]}".format(a=["spkk",".","cn"]))
#輸出spkk.cn
spkk.cn
>>> print("{dict[host]}{dict[dot]}{dict[domain]}".format(dict={"host":"www","domain":"spkk.cn","dot":"."}))
#輸出www.spkk.cn
www.spkk.cn
>>> print("{a}勘伺".format(a="python",b="3"))
#輸出python3
python3
>>> print("{who} {doing} {0}".format("python",doing="like",who="I"))
#輸出I like python
I like python
str.format
str.format
的基本使用如下所示:
>>> print('{} website: "{}!"'.format('Runobb tuorial','www.runoob.com'))
Runobb tuorial website: "www.runoob.com!"
括號(hào)及其里面的字符(稱作格式化字段)將會(huì)被format()
中的參數(shù)替換。在括號(hào)中的數(shù)字用于指向傳入對(duì)象在format()
中的位置褂删,如下所示:
>>> print('{0} and {1}'.format('Google','Runoob'))
Google and Runoob
>>>
>>> print('{1} and {0}'.format('Google','Runoob'))
Runoob and Google
如果在 format() 中使用了關(guān)鍵字參數(shù), 那么它們的值會(huì)指向使用該名字的參數(shù),如下所示:
>>> print('{name}website:{site}'.format(name='Runoob tutorial ',site='www.runoob.com'))
Runoob tutorial website:www.runoob.com
位置及關(guān)鍵字參數(shù)可以任意的結(jié)合:
>>> print('Website list {0},{1}, and {other}. '.format('Google','Runoob',other='Taobao'))
Website list Google,Runoob, and Taobao.
'!a'
(使用ascii()
),'!s'
(使用str()
)和'!r'
(使用repr()
)可以用于在格式化某個(gè)值之前對(duì)其進(jìn)行轉(zhuǎn)化冲茸,如下所示:
>>> import math
>>> print('Constant of PI is around:{}.'.format(math.pi))
Constant of PI is around:3.141592653589793.
>>> print('Constant of PI is around:{!r}.'.format(math.pi))
Constant of PI is around:3.141592653589793.
可選項(xiàng)':'
和格式標(biāo)識(shí)符可以跟著字段名屯阀。這就允許對(duì)值進(jìn)行更好的格式化。下面的例子將Pi保留到小數(shù)點(diǎn)后三位轴术,如下所示:
>>> import math
>>> print('Constant PI is about: {0:.3f}.'.format(math.pi))
Constant PI is about: 3.142.
在':'
后傳入一個(gè)整數(shù),可以保證該域至少有這么多的寬度难衰。用于美化表格時(shí)很有用,如下所示:
>>> table = {'Google':1,'Runoob':2,'Taobao':3}
>>> for name, number in table.items():
... print('{0:10} ==> {1:10d}'.format(name,number))
...
Google ==> 1
Runoob ==> 2
Taobao ==> 3
如果你有一個(gè)很長(zhǎng)的格式化字符串, 而你不想將它們分開, 那么在格式化時(shí)通過變量名而非位置會(huì)是很好的事情逗栽。 最簡(jiǎn)單的就是傳入一個(gè)字典, 然后使用方括號(hào)[]
來訪問鍵值 :
>>> table = {'Google':1,'Runoob':2,'Taobao':3}
>>> print('Runoob:{0[Runoob]:d}; Google:{0[Google]:d}; Taobao:{0[Taobao]:d}'.format(table))
Runoob:2; Google:1; Taobao:3
也可以通過在 table 變量前使用**
來實(shí)現(xiàn)相同的功能:
>>> table = {'Google':1,'Runoob':2,'Taobao':3}
>>> print('Runoob:{Runoob:d};Google:{Google:d};Taobao:{Taobao:d}'.format(**table))
Runoob:2;Google:1;Taobao:3
%
用于格式化輸出
格式化字符串時(shí)盖袭,Python使用一個(gè)字符串作為模板。模板中有格式符,這些格式符為真實(shí)值預(yù)留位置鳄虱,并說明真實(shí)數(shù)值應(yīng)該呈現(xiàn)的格式弟塞。Python用一個(gè)tuple將多個(gè)值傳遞給模板,每個(gè)值對(duì)應(yīng)一個(gè)格式符拙已。%
的格式化輸出如下所示:
>>> print("I'm %s. I'm %d year old" % ('Vamei', 99))
I'm Vamei. I'm 99 year old
它的用法如下圖所示:
[圖片上傳失敗...(image-b4c143-1551584517626)]
格式符匯總
格式符為真實(shí)值預(yù)留位置决记,并控制顯示的格式。格式符可以包含有一個(gè)類型碼倍踪,用以控制顯示的類型系宫,如下所示:
%s 字符串 (采用str()的顯示)
%r 字符串 (采用repr()的顯示)
%c 單個(gè)字符
%b 二進(jìn)制整數(shù)
%d 十進(jìn)制整數(shù)
%i 十進(jìn)制整數(shù)
%o 八進(jìn)制整數(shù)
%x 十六進(jìn)制整數(shù)
%e 指數(shù) (基底寫為e)
%E 指數(shù) (基底寫為E)
%f 浮點(diǎn)數(shù)
%F 浮點(diǎn)數(shù),與上相同
%g 指數(shù)(e)?或浮點(diǎn)數(shù) (根據(jù)顯示長(zhǎng)度)
%G 指數(shù)(E)或浮點(diǎn)數(shù) (根據(jù)顯示長(zhǎng)度)
格式符號(hào)進(jìn)階
格式符號(hào)還可以按如下方式進(jìn)行使用:
1. %[(name)][flags][width].[precision]typecode
2. (name)為命名
3. flags可以有+,-,' '或0建车。+表示右對(duì)齊扩借。-表示左對(duì)齊。' '為一個(gè)空格缤至,表示在正數(shù)的左側(cè)填充一個(gè)空格潮罪,從而與負(fù)數(shù)對(duì)齊。0表示使用0填充凄杯。
4. width表示顯示寬度
5. precision表示小數(shù)點(diǎn)后精度
使用案例如下所示:
>>> print("%+10x" % 10)
+a
>>> print("%04d" % 5)
0005
>>> print("%6.3f" % 2.3)
2.300
上面的width, precision為兩個(gè)整數(shù)错洁。我們可以利用*
,來動(dòng)態(tài)代入這兩個(gè)量。比如:
>>> print("%.*f" % (4, 1.2))
1.2000
Python實(shí)際上用4來替換*
裸燎。所以實(shí)際的模板為%.4f
:
>>> print("%.4f" % (1.2))
1.2000
參考資料
- 編程小白的第一本Python入門書
- Python可以這樣學(xué).董付國(guó)
- Python教程|菜鳥教程