摘要:第一章數(shù)據(jù)類型隱式方法利用快速生成字典方法方法通過下標(biāo)找元素自動(dòng)支持切片操作可迭代方法與如果是一個(gè)自定義類的對(duì)象,那么會(huì)自己去調(diào)用其中由你實(shí)現(xiàn)的方法。若返回,則會(huì)返回否則返回。一個(gè)對(duì)象沒有函數(shù),解釋器會(huì)用作為替代。
第一章 python數(shù)據(jù)類型 1 隱式方法
利用collections.namedtuple 快速生成字典
import collections Card = collections.namedtuple("Card", ["rank", "suit"]) class FrenchDeck: ranks = [str(n) for n in range(2, 11)] + list("JQKA") suits = "spades diamonds clubs hearts".split() def __init__(self): self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks] def __len__(self): return len(self._cards) def __getitem__(self, position): return self._cards[position]1.1 __getitem__方法
deck = FrenchDeck()
>>> deck[0] Card(rank="2", suit="spades") >>> deck[-1] Card(rank="A", suit="hearts")
__getitem__方法
通過下標(biāo)找元素
自動(dòng)支持切片(slicing)操作
可迭代
1.2 __len__方法 與 len(my_object)如果my_object 是一個(gè)自定義類的對(duì)象,那么 Python 會(huì)自己去調(diào)用其中由 你實(shí)現(xiàn)的 len 方法。
Python 內(nèi)置的類型,比如列表(list)、字符串(str)、 字節(jié)序列(bytearray)等,那么 CPython
會(huì)抄個(gè)近路,__len__ 實(shí)際 上會(huì)直接返回 PyVarObject 里的 ob_size 屬性。
背后其實(shí)用的是 iter(x)
而這個(gè)函數(shù)的背后則是 x.__iter__() 方法。
比如 foo 之類的
因?yàn)殡m然現(xiàn)在這個(gè)名字沒有被 Python 內(nèi)部使用,以后就不一定了
>>> from random import choice >>> choice(deck) Card(rank="3", suit="hearts") >>> choice(deck) Card(rank="K", suit="spades") >>> choice(deck) Card(rank="2", suit="clubs")2 字符串表示形式 repr 和 str
__repr__和__str__這兩個(gè)方法都是用于顯示的
__str__是面向用戶的,而__repr__面向程序員。
一個(gè)對(duì)象沒有 str 函數(shù),解釋器會(huì)用 repr 作為替代。
3 算術(shù)運(yùn)算符add 和 __mul__,類帶來了 + 和 * 這兩個(gè)算
術(shù)運(yùn)算符。
列表項(xiàng)目bool(x) 的背后是調(diào)用x.__bool__() 的結(jié)果;
如果不存在 bool 方法,那么 bool(x) 會(huì)嘗試調(diào)用 x.__len__()。
若返回 0,則 bool 會(huì)返回 False;否則返回True。
5 其他隱式方法請(qǐng)見 書1.3 特殊方法一覽 小總結(jié)
collections.namedtuple 快速生成字典
__getitem__方法
通過下標(biāo)找元素
自動(dòng)支持切片(slicing)操作
可迭代
len()
len(my_obj )自定義類的對(duì)象,自定義實(shí)現(xiàn)的 len 方法。
python內(nèi)置類型,通過內(nèi)部類型的屬性直接取得
repr__和__str
__repr__和__str__這兩個(gè)方法都是用于顯示的
__str__是面向用戶的,而__repr__面向程序員。
一個(gè)對(duì)象沒有 str 函數(shù),解釋器會(huì)用 repr 作為替代。
from random import choice 一個(gè)隨機(jī)選取的輪子
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41537.html
摘要:第一章數(shù)據(jù)類型隱式方法利用快速生成類方法方法通過下標(biāo)找元素自動(dòng)支持切片操作可迭代方法與如果是一個(gè)自定義類的對(duì)象,那么會(huì)自己去調(diào)用其中由你實(shí)現(xiàn)的方法。若返回,則會(huì)返回否則返回。一個(gè)對(duì)象沒有函數(shù),解釋器會(huì)用作為替代。 第一章 python數(shù)據(jù)類型 1 隱式方法 利用collections.namedtuple 快速生成類 import collections Card = collec...
摘要:例如,的序列協(xié)議只需要和兩個(gè)方法。任何類如,只要使用標(biāo)準(zhǔn)的簽名和語義實(shí)現(xiàn)了這兩個(gè)方法,就能用在任何期待序列的地方。方法開放了內(nèi)置序列實(shí)現(xiàn)的棘手邏輯,用于優(yōu)雅地處理缺失索引和負(fù)數(shù)索引,以及長度超過目標(biāo)序列的切片。 序列的修改、散列和切片 接著造Vector2d類 要達(dá)到的要求 為了編寫Vector(3, 4) 和 Vector(3, 4, 5) 這樣的代碼,我們可以讓 init 法接受任...
摘要:以便于用戶理解的方式返回對(duì)象的字符串表示形式。函數(shù)會(huì)調(diào)用函數(shù),對(duì)來說,輸出的是一個(gè)有序?qū)?。此外,還有用于支持內(nèi)置的構(gòu)造函數(shù)的方法。可散列實(shí)現(xiàn)了方法,使用推薦的異或運(yùn)算符計(jì)算實(shí)例屬性的散列值私有屬性最好用命名規(guī)則來實(shí)現(xiàn)這種方式有好有壞 絕對(duì)不要使用兩個(gè)前導(dǎo)下劃線,這是很煩人的自私行為。——Ian Bicking 對(duì)象表示形式 repr() 以便于開發(fā)者理解的方式返回對(duì)象的字符串表示形式...
摘要:前言并發(fā)編程的目的是讓程序跑的更快,但并不是啟動(dòng)更多的線程,這個(gè)程序就跑的更快。盡可能降低上下文切換的次數(shù),有助于提高并發(fā)效率。死鎖并發(fā)編程中的另一挑戰(zhàn)是死鎖,會(huì)造成系統(tǒng)功能不可用。 前言 并發(fā)編程的目的是讓程序跑的更快,但并不是啟動(dòng)更多的線程,這個(gè)程序就跑的更快。有以下幾種挑戰(zhàn)。 挑戰(zhàn)及方案 上下文切換 單核CPU上執(zhí)行多線程任務(wù),通過給每個(gè)線程分配CPU時(shí)間片的方式來實(shí)現(xiàn)這個(gè)機(jī)制。...
摘要:可以賦值對(duì)象的生命周期主要是有創(chuàng)建初始化銷毀。顯示而非隱式對(duì)于每個(gè)方法,都應(yīng)當(dāng)顯示的制定要初始化的變量。每當(dāng)創(chuàng)建一個(gè)對(duì)象,會(huì)創(chuàng)建一個(gè)空對(duì)象,然后調(diào)用該對(duì)象的函數(shù),提供了初始化的操作。以點(diǎn)為例作為說明。 第一部分 用特殊方法實(shí)現(xiàn)Python風(fēng)格的類 為了實(shí)現(xiàn)更好的可擴(kuò)展性,Python語言提供了大量的特殊方法,它們大致分為以下幾類。 特性訪問 可調(diào)用對(duì)象 集合 數(shù)字 上下文 迭代器 ...
閱讀 1123·2021-09-22 16:04
閱讀 1502·2019-08-30 15:43
閱讀 1110·2019-08-29 14:01
閱讀 3446·2019-08-26 12:19
閱讀 3361·2019-08-26 12:15
閱讀 1454·2019-08-26 12:13
閱讀 3273·2019-08-23 17:00
閱讀 1491·2019-08-23 15:38