python 下標取值原理簡單實現 getitem

2021-10-04 02:04:55 字數 2033 閱讀 1598

import collections

from random import choice

# 建立乙個牌類 只有乙個 牌的大小 和 牌的花色

card = collections.namedtuple(

'card____',[

'rank'

,'suits'])

class

image

: ranks =

[str

(i)for i in

range(2

,11)]

+list

('jqka'

)# 面值

suits =

'spades diamonds clubs hearts'

.split(

)# 花色

def__init__

(self)

: self._cards =

[card(cr,su)

for cr in __class__.ranks

for su in __class__.suits]

# len 魔術方法會在呼叫 len() 函式的時候 自動呼叫

def__len__

(self)

:print

('呼叫了 __len__ 魔術方法'

)return

len(self._cards)

# 在使用下標取值的時候 會自動呼叫 __getitem__ 方法

def__getitem__

(self, item)

:print

('通過下標取值,自動呼叫了 __getitem__ 方法'

)return self._cards[item]

# 建立乙個物件(一副牌)

ca = image(

)# 呼叫 len() 方法得到牌的數量

print

(len

(ca)

)# 使用下標取指定牌

print

(ca[2]

)print

(ca[22:

:2])

# 隨機取出一張牌

# print(choice(ca))

# 實現了 __getitem__ 方法這個物件就已經變成可迭代物件了

for i in ca:

print

(i,end='')

# 排序操作 2 最小、a 最大;同時還要加上對花色的判定,黑桃最大、紅桃次之、方塊再次、梅花最小

su_sort =

dict

(spades=

3, hearts=

2, diamonds=

1, clubs=0)

defsort_func

(card)

: rank_value = image.ranks.index(card.rank)

# 得到牌面的rank索引

return rank_value *

len(su_sort)

+ su_sort[card.suits]

for i in

sorted

(ca,key=sort_func)

:print

(i._fields,i.rank,i[1]

)# 通過不同的方式取到 namedtuple 生成的類中的值

# ps: python內建的型別,比如列表( list ) 字串( str ) 位元組序列( bytearray ) cpython 會抄個近路,__len__ 實際上會直接返回 pyvarobject 裡的 ob_size 屬性 pyvarobject 是表示記憶體中長度可變的內建物件的 c 語言結構體 直接讀取這個值比 呼叫乙個方法要快很多

# collections.namedtuple 是乙個工廠函式,它可以用來構建乙個帶欄位名的元組和乙個有名字的類,用 namedtuple 構建的類的例項所消耗的記憶體跟元組是一樣的

# _fields 屬性是乙個包含這個類所有欄位名稱的元組,

python的實現原理 python爬蟲實現原理

前言 簡單來說網際網路是由乙個個站點和網路裝置組成的大網,我們通過瀏覽器訪問站點,站點把html js css 返回給瀏覽器,這些 經過瀏覽器解析 渲染,將豐富多彩的網頁呈現我們眼前 一 爬蟲是什麼?如果我們把網際網路比作一張大的蜘蛛網,資料便是存放於蜘蛛網的各個節點,而爬蟲就是乙隻小蜘蛛,二 爬蟲...

gcForest演算法原理及Python實現

1.背景介紹 從目前來看深度學習大多建立在多層的神經網路基礎上,也即一些引數化的多層可微的非線性模組,這樣就可以通過後向傳播去訓練,zhi hua zhou和ji feng在deep forest 中基於不可微的模組建立深度模組,這就是gcforest。傳統的深度學習有一定的弊端 超引數個數較多,訓...

python匿名函式lambda原理及例項解析

如下 coding utf 8 author www.iplaypy.com www.cppcns.com 普通python函式 def func a,b,c return a b c print func 1,2,3 返回值為6 lambda匿名函式 f lambda a,b,c a b c pr...