Python數(shù)據(jù)類型之?dāng)?shù)字與字符串

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

isinstancetype()的區(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ū)別如下所示:

  1. str():函數(shù)返回一個(gè)用戶易讀的表達(dá)形式棠枉。
  2. 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

參考資料

  1. 編程小白的第一本Python入門書
  2. Python可以這樣學(xué).董付國(guó)
  3. Python教程|菜鳥教程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巧涧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子导而,更是在濱河造成了極大的恐慌,老刑警劉巖隔崎,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件今艺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爵卒,警方通過查閱死者的電腦和手機(jī)虚缎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钓株,“玉大人实牡,你說我怎么就攤上這事≈岷希” “怎么了创坞?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)受葛。 經(jīng)常有香客問我题涨,道長(zhǎng)偎谁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任纲堵,我火速辦了婚禮巡雨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婉支。我一直安慰自己鸯隅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布向挖。 她就那樣靜靜地躺著蝌以,像睡著了一般。 火紅的嫁衣襯著肌膚如雪何之。 梳的紋絲不亂的頭發(fā)上跟畅,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音溶推,去河邊找鬼徊件。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蒜危,可吹牛的內(nèi)容都是我干的虱痕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辐赞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼部翘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起响委,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤新思,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赘风,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夹囚,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年邀窃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荸哟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞬捕,死狀恐怖鞍历,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情山析,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布掏父,位于F島的核電站笋轨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爵政,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一仅讽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钾挟,春花似錦洁灵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至汤锨,卻和暖如春双抽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闲礼。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工牍汹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柬泽。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓慎菲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親锨并。 傳聞我的和親對(duì)象是個(gè)殘疾皇子露该,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,744評(píng)論 0 10
  • 本節(jié)要介紹的是Python里面常用的幾種數(shù)據(jù)結(jié)構(gòu)揽趾。通常情況下台汇,聲明一個(gè)變量只保存一個(gè)值是遠(yuǎn)遠(yuǎn)不夠的,我們需要將一組...
    小黑y99閱讀 65,193評(píng)論 0 9
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評(píng)論 0 4
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,380評(píng)論 0 5
  • 大學(xué)暑期騎行過一次篱瞎,路程是遂平-駐馬店-信陽(yáng)-孝感-武漢-潛江-荊州-宜昌-三峽-荊門-襄陽(yáng)(2010年叫襄樊)-...
    閑庭漫步的羊閱讀 128評(píng)論 0 0