Pythonnamedtuple的用法是什么-創(chuàng)新互聯(lián)

本篇內(nèi)容介紹了“Python namedtuple的用法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

10年積累的成都網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有澤庫免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1:說一下你對(duì)Python中模塊和包的理解。

每個(gè)Python文件就是一個(gè)模塊,而保存這些文件的文件夾就是一個(gè)包,但是這個(gè)作為Python包的文件夾必須要有一個(gè)名為__init__.py的文件,否則無法導(dǎo)入這個(gè)包。通常一個(gè)文件夾下還可以有子文件夾,這也就意味著一個(gè)包下還可以有子包,子包中的__init__.py并不是必須的。模塊和包解決了Python中命名沖突的問題,不同的包下可以有同名的模塊,不同的模塊下可以有同名的變量、函數(shù)或類。在Python中可以使用import或from ... import ...來導(dǎo)入包和模塊,在導(dǎo)入的時(shí)候還可以使用as關(guān)鍵字對(duì)包、模塊、類、函數(shù)、變量等進(jìn)行別名,從而徹底解決編程中尤其是多人協(xié)作團(tuán)隊(duì)開發(fā)時(shí)的命名沖突問題。

2:說一下你知道的Python編碼規(guī)范。

點(diǎn)評(píng):企業(yè)的Python編碼規(guī)范基本上是參照PEP-8或谷歌開源項(xiàng)目風(fēng)格指南來制定的,后者還提到了可以使用Lint工具來檢查代碼的規(guī)范程度,面試的時(shí)候遇到這類問題,可以先說下這兩個(gè)參照標(biāo)準(zhǔn),然后挑重點(diǎn)說一下Python編碼的注意事項(xiàng)。

空格的使用

  1. 使用空格來表示縮進(jìn)而不要用制表符(Tab)。

  2. 和語法相關(guān)的每一層縮進(jìn)都用4個(gè)空格來表示。

  3. 每行的字符數(shù)不要超過79個(gè)字符,如果表達(dá)式因太長(zhǎng)而占據(jù)了多行,除了首行之外的其余各行都應(yīng)該在正常的縮進(jìn)寬度上再加上4個(gè)空格。

  4. 函數(shù)和類的定義,代碼前后都要用兩個(gè)空行進(jìn)行分隔。

  5. 在同一個(gè)類中,各個(gè)方法之間應(yīng)該用一個(gè)空行進(jìn)行分隔。

  6. 二元運(yùn)算符的左右兩側(cè)應(yīng)該保留一個(gè)空格,而且只要一個(gè)空格就好。

標(biāo)識(shí)符命名

  1. 變量、函數(shù)和屬性應(yīng)該使用小寫字母來拼寫,如果有多個(gè)單詞就使用下劃線進(jìn)行連接。

  2. 類中受保護(hù)的實(shí)例屬性,應(yīng)該以一個(gè)下劃線開頭。

  3. 類中私有的實(shí)例屬性,應(yīng)該以兩個(gè)下劃線開頭。

  4. 類和異常的命名,應(yīng)該每個(gè)單詞首字母大寫。

  5. 模塊級(jí)別的常量,應(yīng)該采用全大寫字母,如果有多個(gè)單詞就用下劃線進(jìn)行連接。

  6. 類的實(shí)例方法,應(yīng)該把第一個(gè)參數(shù)命名為self以表示對(duì)象自身。

  7. 類的類方法,應(yīng)該把第一個(gè)參數(shù)命名為cls以表示該類自身。

表達(dá)式和語句

  1. 采用內(nèi)聯(lián)形式的否定詞,而不要把否定詞放在整個(gè)表達(dá)式的前面。例如:if a is not b就比if not a is b更容易讓人理解。

  2. 不要用檢查長(zhǎng)度的方式來判斷字符串、列表等是否為None或者沒有元素,應(yīng)該用if not x這樣的寫法來檢查它。

  3. 就算if分支、for循環(huán)、except異常捕獲等中只有一行代碼,也不要將代碼和if、for、except等寫在一起,分開寫才會(huì)讓代碼更清晰。

  4. import語句總是放在文件開頭的地方。

  5. 引入模塊的時(shí)候,from math import sqrt比import math更好。

  6. 如果有多個(gè)import語句,應(yīng)該將其分為三部分,從上到下分別是Python標(biāo)準(zhǔn)模塊、第三方模塊和自定義模塊,每個(gè)部分內(nèi)部應(yīng)該按照模塊名稱的字母表順序來排列。

3:運(yùn)行下面的代碼是否會(huì)報(bào)錯(cuò),如果報(bào)錯(cuò)請(qǐng)說明哪里有什么樣的錯(cuò),如果不報(bào)錯(cuò)請(qǐng)說出代碼的執(zhí)行結(jié)果。

class A:
   def __init__(self, value):
       self.__value = value

   @property
   def value(self):
       return self.__value

obj = A(1)
obj.__value = 2
print(obj.value)
print(obj.__value)

點(diǎn)評(píng):這道題有兩個(gè)考察點(diǎn),一個(gè)考察點(diǎn)是對(duì)_和__開頭的對(duì)象屬性訪問權(quán)限以及@property裝飾器的了解,另外一個(gè)考察的點(diǎn)是對(duì)動(dòng)態(tài)語言的理解,不需要過多的解釋。

1
2

擴(kuò)展:如果不希望代碼運(yùn)行時(shí)動(dòng)態(tài)的給對(duì)象添加新屬性,可以在定義類時(shí)使用__slots__魔法。例如,我們可以在上面的A中添加一行__slots__ = ('__value', ),再次運(yùn)行上面的代碼,將會(huì)在原來的第10行處產(chǎn)生AttributeError錯(cuò)誤。

4:對(duì)下面給出的字典按值從大到小對(duì)鍵進(jìn)行排序。

prices = {
   'AAPL': 191.88,
   'GOOG': 1186.96,
   'IBM': 149.24,
   'ORCL': 48.44,
   'ACN': 166.89,
   'FB': 208.09,
   'SYMC': 21.29
}

點(diǎn)評(píng):sorted函數(shù)的高階用法在面試的時(shí)候經(jīng)常出現(xiàn),key參數(shù)可以傳入一個(gè)函數(shù)名或一個(gè)Lambda函數(shù),該函數(shù)的返回值代表了在排序時(shí)比較元素的依據(jù)。

sorted(prices, key=lambda x: prices[x], reverse=True)

題目45:說一下namedtuple的用法和作用。

點(diǎn)評(píng):Python標(biāo)準(zhǔn)庫的collections模塊提供了很多有用的數(shù)據(jù)結(jié)構(gòu),這些內(nèi)容并不是每個(gè)開發(fā)者都清楚,就比如題目問到的namedtuple,在我參加過的面試中,90%的面試者都不能準(zhǔn)確的說出它的作用和應(yīng)用場(chǎng)景。此外,deque也是一個(gè)非常有用但又經(jīng)常被忽視的類,還有Counter、OrderedDict 、defaultdict 、UserDict等類,大家清楚它們的用法嗎?

在使用面向?qū)ο缶幊陶Z言的時(shí)候,定義類是最常見的一件事情,有的時(shí)候,我們會(huì)用到只有屬性沒有方法的類,這種類的對(duì)象通常只用于組織數(shù)據(jù),并不能接收消息,所以我們把這種類稱為數(shù)據(jù)類或者退化的類,就像C語言中的結(jié)構(gòu)體那樣。我們并不建議使用這種退化的類,在Python中可以用namedtuple(命名元組)來替代這種類。

from collections 
import namedtuple

Card = namedtuple('Card', ('suite', 'face'))
card1 = Card('紅桃', 13)
card2 = Card('草花', 5)
print(f'{card1.suite}{card1.face}')
print(f'{card2.suite}{card2.face}')

命名元組與普通元組一樣是不可變?nèi)萜?,一旦將?shù)據(jù)存儲(chǔ)在namedtuple的頂層屬性中,數(shù)據(jù)就不能再修改了,也就意味著對(duì)象上的所有屬性都遵循“一次寫入,多次讀取”的原則。和普通元組不同的是,命名元組中的數(shù)據(jù)有訪問名稱,可以通過名稱而不是索引來獲取保存的數(shù)據(jù),不僅在操作上更加簡(jiǎn)單,代碼的可讀性也會(huì)更好。

命名元組的本質(zhì)就是一個(gè)類,所以它還可以作為父類創(chuàng)建子類。除此之外,命名元組內(nèi)置了一系列的方法,例如,可以通過_asdict方法將命名元組處理成字典,也可以通過_replace方法創(chuàng)建命名元組對(duì)象的淺拷貝。

class MyCard(Card):

   def show(self):
       faces = ['', 'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
       return f'{self.suite}{faces[self.face]}'print(Card)    # <class '__main__.Card'>
card3 = MyCard('方塊', 12)
print(card3.show())    # 方塊Q
print(dict(card1._asdict()))    # {'suite': '紅桃', 'face': 13}
print(card2._replace(suite='方塊'))    # Card(suite='方塊', face=5)

“Python namedtuple的用法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

當(dāng)前題目:Pythonnamedtuple的用法是什么-創(chuàng)新互聯(lián)
當(dāng)前URL:http://bm7419.com/article24/dgopje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、用戶體驗(yàn)、移動(dòng)網(wǎng)站建設(shè)、面包屑導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃

廣告

聲明:本網(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)

手機(jī)網(wǎng)站建設(shè)