摘要:第一章數據類型隱式方法利用快速生成字典方法方法通過下標找元素自動支持切片操作可迭代方法與如果是一個自定義類的對象,那么會自己去調用其中由你實現的方法。若返回,則會返回否則返回。一個對象沒有函數,解釋器會用作為替代。
第一章 python數據類型 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__方法
通過下標找元素
自動支持切片(slicing)操作
可迭代
1.2 __len__方法 與 len(my_object)如果my_object 是一個自定義類的對象,那么 Python 會自己去調用其中由 你實現的 len 方法。
Python 內置的類型,比如列表(list)、字符串(str)、 字節序列(bytearray)等,那么 CPython
會抄個近路,__len__ 實際 上會直接返回 PyVarObject 里的 ob_size 屬性。
背后其實用的是 iter(x)
而這個函數的背后則是 x.__iter__() 方法。
比如 foo 之類的
因為雖然現在這個名字沒有被 Python 內部使用,以后就不一定了
>>> 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__這兩個方法都是用于顯示的
__str__是面向用戶的,而__repr__面向程序員。
一個對象沒有 str 函數,解釋器會用 repr 作為替代。
3 算術運算符add 和 __mul__,類帶來了 + 和 * 這兩個算
術運算符。
列表項目bool(x) 的背后是調用x.__bool__() 的結果;
如果不存在 bool 方法,那么 bool(x) 會嘗試調用 x.__len__()。
若返回 0,則 bool 會返回 False;否則返回True。
5 其他隱式方法請見 書1.3 特殊方法一覽 小總結
collections.namedtuple 快速生成字典
__getitem__方法
通過下標找元素
自動支持切片(slicing)操作
可迭代
len()
len(my_obj )自定義類的對象,自定義實現的 len 方法。
python內置類型,通過內部類型的屬性直接取得
repr__和__str
__repr__和__str__這兩個方法都是用于顯示的
__str__是面向用戶的,而__repr__面向程序員。
一個對象沒有 str 函數,解釋器會用 repr 作為替代。
from random import choice 一個隨機選取的輪子
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41537.html
摘要:第一章數據類型隱式方法利用快速生成類方法方法通過下標找元素自動支持切片操作可迭代方法與如果是一個自定義類的對象,那么會自己去調用其中由你實現的方法。若返回,則會返回否則返回。一個對象沒有函數,解釋器會用作為替代。 第一章 python數據類型 1 隱式方法 利用collections.namedtuple 快速生成類 import collections Card = collec...
摘要:例如,的序列協議只需要和兩個方法。任何類如,只要使用標準的簽名和語義實現了這兩個方法,就能用在任何期待序列的地方。方法開放了內置序列實現的棘手邏輯,用于優雅地處理缺失索引和負數索引,以及長度超過目標序列的切片。 序列的修改、散列和切片 接著造Vector2d類 要達到的要求 為了編寫Vector(3, 4) 和 Vector(3, 4, 5) 這樣的代碼,我們可以讓 init 法接受任...
摘要:以便于用戶理解的方式返回對象的字符串表示形式。函數會調用函數,對來說,輸出的是一個有序對。此外,還有用于支持內置的構造函數的方法。可散列實現了方法,使用推薦的異或運算符計算實例屬性的散列值私有屬性最好用命名規則來實現這種方式有好有壞 絕對不要使用兩個前導下劃線,這是很煩人的自私行為。——Ian Bicking 對象表示形式 repr() 以便于開發者理解的方式返回對象的字符串表示形式...
摘要:前言并發編程的目的是讓程序跑的更快,但并不是啟動更多的線程,這個程序就跑的更快。盡可能降低上下文切換的次數,有助于提高并發效率。死鎖并發編程中的另一挑戰是死鎖,會造成系統功能不可用。 前言 并發編程的目的是讓程序跑的更快,但并不是啟動更多的線程,這個程序就跑的更快。有以下幾種挑戰。 挑戰及方案 上下文切換 單核CPU上執行多線程任務,通過給每個線程分配CPU時間片的方式來實現這個機制。...
摘要:可以賦值對象的生命周期主要是有創建初始化銷毀。顯示而非隱式對于每個方法,都應當顯示的制定要初始化的變量。每當創建一個對象,會創建一個空對象,然后調用該對象的函數,提供了初始化的操作。以點為例作為說明。 第一部分 用特殊方法實現Python風格的類 為了實現更好的可擴展性,Python語言提供了大量的特殊方法,它們大致分為以下幾類。 特性訪問 可調用對象 集合 數字 上下文 迭代器 ...
閱讀 1111·2021-09-22 16:04
閱讀 1494·2019-08-30 15:43
閱讀 1097·2019-08-29 14:01
閱讀 3438·2019-08-26 12:19
閱讀 3353·2019-08-26 12:15
閱讀 1444·2019-08-26 12:13
閱讀 3264·2019-08-23 17:00
閱讀 1484·2019-08-23 15:38