日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

流畅的Python 1. Python数据模型(特殊方法 __func__())

發布時間:2024/7/5 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 流畅的Python 1. Python数据模型(特殊方法 __func__()) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. `__getitem__()、__len__()` 方法
    • 2. 特殊方法

1. __getitem__()、__len__() 方法

  • 舉一個撲克牌的例子
import collectionsCard = collections.namedtuple('Card_name', ['rank', 'suit']) print(Card.__doc__) # Card_name(rank, suit)class FrenchDeck:ranks = [str(n) for n in range(2, 11)] + list('JKQA')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, pos):return self._cards[pos]deck = FrenchDeck() print(len(deck)) # 13*4=52 print(deck[0]) # [] 調用 __getitem__ 方法 # Card_name(rank='2', suit='spades')from random import choiceprint(choice(deck)) # Card_name(rank='4', suit='clubs') 隨機 print(choice(deck)) # Card_name(rank='J', suit='diamonds') print(choice(deck)) # Card_name(rank='3', suit='clubs')# __getitem__ 支持切片操作 # 取出前 3 個 print(deck[:3]) # 取出 A的所有項 print(deck[12::13]) # 12 開始 結束沒有寫默認結尾,每隔13個取一次# __getitem__ 反向迭代也可以 for card in reversed(deck):print(card)# 沒有實現 __contains__ 方法,in 順序做一次迭代搜索 print(Card('Q', 'hearts') in deck) # True print(Card('7', 'abc') in deck) # False# 排序 suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) def spades_high(card):# 自定義牌的 rank_valuerank_value = FrenchDeck.ranks.index(card.rank)return rank_value*len(suit_values) + suit_values[card.suit] # 自定義排序 for card in sorted(deck, key=spades_high):print(card)

2. 特殊方法

  • python解釋器會自動調用,如 len(obj) ,解釋器 調用 obj的 __len__() 方法
  • 內置的類型的 __len__() 方法,抄近路,直接讀取 ob_size 屬性
  • for i in x:,是 iter(x) 調用了 x.__iter__() 方法
  • 通過內置函數(如,len,iter,str等)來使用特殊方法是最好的選擇
  • 不要自己隨意添加特殊方法 __func__ ,將來的 python版本 可能添加該方法

特殊方法:https://docs.python.org/3/reference/datamodel.html

from math import hypot # 返回模長 Euclidean distanceclass Vector:def __init__(self, x=0, y=0):self.x = xself.y = ydef __repr__(self): # 打印的時候輸出內容print("調用__repr__")# %r 獲取 各個屬性的標準字符串表示形式return 'Vector(%r, %r)' % (self.x, self.y)# __str__() 是在 str() 或 print() 時調用,返回的字符串更友好# 請優先使用 __repr__, 如果調用 str() 但是有沒有實現 __str__(),# 解釋器自動用 __repr__ 代替# def __str__(self):# return "print() 優先調用 __str__()"def __abs__(self):print("調用__abs__")return hypot(self.x, self.y)def __bool__(self):print("調用__bool__")# bool(x) 調用 x.__bool__(), 如果不存在,則調用 x.__len__()return bool(abs(self))# 或者# return (self.x or self.y) # 更高效def __add__(self, other):print("調用__add__")x = self.x + other.xy = self.y + other.y# 原則:不改變輸入,創建新的輸出return Vector(x, y)def __mul__(self, scalar):print("調用__mul__")# 原則:不改變輸入,創建新的輸出return Vector(self.x * scalar, self.y * scalar)def __rmul__(self, scalar): # 交換律print("調用__rmul__")# 原則:不改變輸入,創建新的輸出return Vector(self.x * scalar, self.y * scalar)v1 = Vector(2, 4) v2 = Vector(2, 1) v3 = v1 + v2 # 調用__add__ print(v3) # 調用__repr__ Vector(4, 5) print(abs(v3)) # 調用__abs__ 6.4031242374328485 print(bool(v3)) # 調用__bool__ 調用__abs__ True print(v3 * 3) # 調用__mul__ 調用__repr__ Vector(12, 15) print(3 * v3) # 調用__rmul__ 調用__repr__ Vector(12, 15) print(str(v3)) # 調用__repr__ Vector(4, 5)

總結

以上是生活随笔為你收集整理的流畅的Python 1. Python数据模型(特殊方法 __func__())的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 深夜在线网站 | 亚洲第8页 | 成人一级网站 | 亚洲天堂免费观看 | 亚洲美女福利 | 欧洲亚洲女同hd | 在线不卡日本 | 成人看| 国产美女一级片 | 国产性生活片 | 国产免费av一区二区 | 熟女人妻aⅴ一区二区三区60路 | 小sao货水好多真紧h无码视频 | 黄色网炮 | 成人片免费视频 | 在线亚洲免费 | 一级片视频在线观看 | 香蕉av网| 亚洲一区二区色 | 99爱视频在线观看 | a人片| 黑人精品无码一区二区三区 | 欧美性猛交性大交 | 亚洲欧美va天堂人熟伦 | 亚洲AV无码成人精品区麻豆 | 麻豆视频入口 | 成人一区二区三区在线 | 小妹色播影院 | 无码人妻精品一区二区 | 色婷婷久久 | 欧美高清hd18日本 | 奴色虐av一区二区三区 | 精品国产99一区二区乱码综合 | 黄色片hd| 免费av中文字幕 | 18欧美性xxxx极品hd | 桃谷绘里香番号 | 污片网站在线观看 | 欧美精品二区三区 | 91亚瑟| 精品成人久久 | 日韩av成人网 | 日韩黄色短片 | 日本五十熟hd丰满 | 内射一区二区三区 | 最新免费黄色网址 | 欧美一二三 | 欧美三级视频在线观看 | 亚洲超丰满肉感bbw 悠悠av | 久久久久九九 | 欧洲黄视频 | 性一交一乱一色一免费无遮挡 | caopeng视频 | 精品婷婷色一区二区三区蜜桃 | 99re在线播放 | 日本一区二区三区四区视频 | 日韩成人黄色片 | 免费的污网站 | 日本免费在线视频 | 国产免费不卡视频 | 久久黑丝 | 无码精品视频一区二区三区 | 毛片视频网址 | 啪啪小视频 | 女王人厕视频2ⅴk | 亚洲av乱码久久精品蜜桃 | 欧美日韩18 | 国产麻豆精品一区二区 | 久久在线精品 | 人妻少妇精品久久 | 五月天婷婷在线观看 | 少妇喷水在线观看 | 国产视频xxxx| 131美女爱做视频 | 热久久免费视频 | 国产一区久久久 | 插吧插吧网 | 激情午夜视频 | 欧美视频一区二区三区四区 | 欧美一级射| 涩涩免费网站 | 黄色网址www | 美女激情网 | 成人免费视频网址 | 日韩av一二三 | 日韩一级黄色片 | 欧美拍拍 | 久草视频免费在线播放 | 国内9l自拍 | 亚洲天堂男人天堂 | 丝袜美女av | 国产精品免费无码 | 亚洲www啪成人一区二区麻豆 | 国产又粗又猛又爽又黄 | 巨胸挤奶视频www网站 | 国产精品尤物视频 | 在线观看的av网址 | 国产性一乱一性一伧一色 | 精品国产一区二区在线 |