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...