日韩性视频-久久久蜜桃-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__())的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品一区在线免费观看 | 亚洲午夜精品久久 | 天天艹夜夜艹 | 成人看片黄a免费看视频 | 玩弄少妇人妻 | 进去里视频在线观看 | 亚洲黄色一级 | 91精品视频观看 | 日韩欧美高清在线视频 | 精品国产不卡 | 99久久婷婷国产综合精品草原 | 爱福利视频广场 | 精品一区二区三区免费观看 | 日本在线高清 | 啪啪影音| 婷婷影院在线观看 | 日本一区不卡视频 | 啪啪啪毛片 | 国产妞干网 | 亚洲无吗视频 | 999福利视频 | 日韩国产欧美综合 | www.性欧美 | 日韩精品1区2区 | 噼里啪啦免费看 | 婷婷啪啪 | 亚洲理论片在线观看 | 中文字幕福利视频 | avtt在线观看 | 啪啪免费网 | 中文字幕精品一区二区精品 | 香港三级日本三级韩国三级 | 日本免费在线观看视频 | 精品久久91 | 一本一道波多野结衣一区二区 | 琪琪原网址 | 美痴女~美人上司北岛玲 | 黑人玩弄人妻一区二区三区四 | 夜夜看 | 国产精品日韩精品 | 日本黄色免费视频 | 日韩欧美亚洲在线 | 亚洲美女视频一区 | 日日干日日 | 成年人av在线播放 | 黑人精品无码一区二区三区AV | 乱短篇艳辣500篇h文最新章节 | 老鸭窝av在线 | 都市激情久久 | 成人深夜小视频 | 久久精品99久久久久久 | 亚洲性xxxx | 日本三区在线 | 国产a大片 | 波多野结衣视频在线播放 | 久热最新视频 | 亚洲无圣光 | 禁久久精品乱码 | 狠狠干b | 国产三级aaa | 亚洲黄色网络 | 久久精品69 | 国产一级特黄aaa大片 | 什么网站可以看毛片 | 日韩欧美视频免费在线观看 | 天天躁日日躁狠狠很躁 | 久久久久99 | 国产男女爽爽爽 | 91超薄肉色丝袜交足高跟凉鞋 | 成人在线视频观看 | 中文字幕av高清 | 婷婷欧美 | 日本电影大尺度免费观看 | 中文字幕免费高 | 欧美日韩一区二区久久 | 兄弟兄弟全集免费观看 | 性欧美久久久 | 视频在线观看一区二区 | 激情四射婷婷 | 国产成人精品一区二区 | 国产偷拍一区二区 | 一区二区三区日韩电影 | 国产成人在线网站 | 中文字幕一区二区三区四区免费看 | 日韩精品激情 | 亚洲成人天堂 | 手机av免费在线观看 | chinese麻豆新拍video | 中文字幕 国产精品 | 久久av网址 | 欧美精品久久久久久久多人混战 | 亚洲蜜臀av一区二区三区 | 日韩资源站 | 黄色一级国产 | 日本a级一区 | 日本女v片 | 欧美精品久久久久久久 | 久插视频| 成人午夜精品福利 |