本文小編為大家詳細(xì)介紹“Python數(shù)據(jù)類型使用注意事項(xiàng)有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Python數(shù)據(jù)類型使用注意事項(xiàng)有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)澄邁,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
元組是另一種經(jīng)常使用到的數(shù)據(jù)類型,看上去和列表差不多。它們之間的區(qū)別在于列表是一個(gè)可變的數(shù)據(jù)類型,而元組是不可變的。
#元組 a = (1, 2) #列表 a = [1, 2]
使用列表會(huì)更靈活,而元組支持的操作更少,有的人會(huì)認(rèn)為沒有必要用元組,直接用列表就可以了。
但正因?yàn)樵M不可變,限制了功能,從效率上來講它會(huì)更加快一些,而且,當(dāng)你不想讓用戶去修改這個(gè)數(shù)據(jù)的時(shí)候,用元組會(huì)更合適,數(shù)據(jù)相對(duì)來說更加安全,不容易出bug。
使用元組的時(shí)候一定要記得在元素的后面加逗號(hào),當(dāng)一個(gè)元組只有一個(gè)元素的時(shí)候,后面不打逗號(hào),是不能表示成元組的,而是元素本身的類型。
a = (1) # 等于 1 a = (1,) #這才是元組
在編程語言當(dāng)中,浮點(diǎn)數(shù)的精度往往不能達(dá)到完全的精確,這會(huì)給我們編程帶來一些問題,甚至呢可能帶來很大的bug。比如說我們現(xiàn)在計(jì)算一個(gè)很簡(jiǎn)單的小數(shù)點(diǎn)的運(yùn)算,0.1+0.2,大家可以先回答一下這個(gè)應(yīng)該等于多少呢?
print(0.1 + 0.2)
很明顯這是一個(gè)小學(xué)的數(shù)學(xué)題,但是呢,當(dāng)我們交給Python去運(yùn)算的話呢,我們得到結(jié)果并不是等于0.3而是等于
0.30000000000000004
這是計(jì)算機(jī)在表示十進(jìn)制小數(shù)的時(shí)候會(huì)出現(xiàn)誤差。
從直觀的感受上看,這種精度好像造成不了太大的影響。但是,在對(duì)數(shù)據(jù)要求非常嚴(yán)格的情況下,這種誤差會(huì)引發(fā)打的問題,尤其是在做測(cè)試的時(shí)候,如果你你的預(yù)期結(jié)果和實(shí)際結(jié)果都不相等,那么你測(cè)試用例肯定是不會(huì)通過的。
在操作銀行、證券這類金融業(yè)務(wù)時(shí),涉及到支付和錢的時(shí)候一定要有非常嚴(yán)格的精度控制。 此時(shí),可以使用 decimal 模塊來保持高精度,我們把需要操作的浮點(diǎn)數(shù)先轉(zhuǎn)換成字符串,再作為參數(shù)傳給 Decimal 類。
from decimal import Decimal print(Decimal("0.1") + Decimal("0.2")) # 0.3
在進(jìn)行除法運(yùn)算的時(shí)候,一定要牢記:被除數(shù)是不能等于0的。
當(dāng)你把0作為一個(gè)被除數(shù)的時(shí)候,程序是會(huì)報(bào)錯(cuò)的。
print(3 / 0)
面試題當(dāng)中列表問題出現(xiàn)的概率應(yīng)該有80%以上,因?yàn)榱斜淼牟僮鞣浅nl繁,而且比較容易出錯(cuò),現(xiàn)在我們就來看一個(gè)經(jīng)典問題:刪除列表元素。
有一個(gè)列表如下,請(qǐng)刪除列表當(dāng)中的每一個(gè)元素,但是不能直接用clear方法。
names = ["九柄", "八柄", "七柄","六柄","五柄"]
按照條件反射,我們一般會(huì)寫一個(gè) for 循環(huán),然后依次執(zhí)行remove方法或者 pop 方法來刪除元素。但是這樣得到的結(jié)果是不對(duì)的,總有幾個(gè)元素刪除不掉。
for name in names: names.remove(name) print(names) # ["八柄", "六柄"]
為什么會(huì)刪不干凈呢?最核心的原因是:刪除掉一個(gè)元素之后,這個(gè)列表發(fā)生了變化。
第1次,我們?nèi)〉降脑厥撬饕秊?的 “九柄”, 它被刪掉了之后, 接下來去取索引為 1 的元素,因?yàn)椤熬疟?已經(jīng)被刪除,所以索引為0的元素已經(jīng)被替換成 "八柄", 索引為1 的元素則為”七柄“, 七柄被刪,八柄跳過去了,沒有被刪除。
然后,取索引為 2 的數(shù)據(jù),為 ”五柄“, ”六柄“ 又被跳過了,從而造成刪除不干凈的情況。
從這個(gè)例子當(dāng)中我們得出一個(gè)結(jié)論,不要在for循環(huán)當(dāng)中去修改列表刪除列表或者增加元素,這樣非常容易出 bug。那上面的問題如果我們想解決怎么辦呢?在我們?nèi)ゲ僮饕粋€(gè)列表的時(shí)候,我們最好是做一個(gè)備份,不直接去修改原來的列表。
for name in names[:]: names.remove(name) print(names)
實(shí)際上大多數(shù)的可變類型雖然增加了靈活性,有更多的操作,但是更容易出bug。在我個(gè)人的編程過程當(dāng)中,我會(huì)盡量使用不可變類型。
為了區(qū)分可變類型和不可變也行,我們舉幾個(gè)例子。
a = [1, 2, ("a", "b")]
此時(shí),a 是列表,是可變類型,可以任意添加、修改其中的元素,比如把索引2的元素?fù)Q成 c
a[2] = "c" # [1,2,'c']
但是,不能改 ("a", "b")
當(dāng)中的元素,因?yàn)樗莻€(gè)元組。
a[2][0] = "c" # 報(bào)錯(cuò)
讀到這里,這篇“Python數(shù)據(jù)類型使用注意事項(xiàng)有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
名稱欄目:Python數(shù)據(jù)類型使用注意事項(xiàng)有哪些
網(wǎng)頁URL:http://jinyejixie.com/article18/iisegp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站改版、搜索引擎優(yōu)化、ChatGPT、品牌網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)