#!/usr/bin/env python3
#-*- coding: utf-8 -*-
"""created on mon apr 20 21:08:08 2020
@author: root
"""import
collections
card = collections.namedtuple('
card
', ['
rank
','suit'])
class
frenchdeck:
ranks = [str(n) for n in range(2,11)]+list('
jqka')
suits='
spades diamods 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]
beer_card = card('
7','
diamods')
print ('
beer_card
',beer_card)
deck=frenchdeck()
(len(deck))
#example1
from random import
choice
choice(deck)
(choice(deck))
#__getitem__
for card in
deck:
(card)
for card in
reversed(deck):
(card)
card('q
','hearts
') in
deck
suit_values=dict(spades=3,hearts=2,diamonds=1,clubs=0)
defspades_high(card):
rank_value =frenchdeck.ranks.index(card.rank)
return rank_value*len(suit_values)+suit_values[card.suit]
for card in sorted(deck,key=spades_high):
(card)
"""python的魔法方法__getitem__ 可以讓物件實現迭代功能,
這樣就可以使用for...in... 來迭代該物件了
在用 for..in.. 迭代物件時,如果物件沒有實現
__iter__ __next__ 迭代器協議,
python的直譯器就會去尋找__getitem__ 來迭代物件
,如果連__getitem__ 都沒有定義,這直譯器就會報物件不是迭代器的錯誤:
"""class
animals:
def__init__
(self,animal_list):
self.animals_name=animal_list
def__getitem__
(self,index):
return
self.animals_name[index]
animals=animals(['
dog','
cat','
fish
'])
for animal in
animals:
(animals)
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
"""created on mon apr 20 22:39:15 2020
@author: root
"""from math import
hypot
class
vector:
def__init__(self,x=0,y=0):
self.x=x
self.y=y
def__repr__
(self):
return
'repr vector(%r,%r)
'%(self.x,self.y)
def__abs__
(self):
return
hypot(self.x,self.y)
def__bool__
(self):
return
bool(abs(self))
def__add__
(self,other):
x=self.x +other.x
y=self.y +other.y
return
vector(x,y)
def__mul__
(self,scalar):
return vector(self.x*scalar,self.y*scalar)
a=vector(1,2)
b=vector(3,4)
print (a+b)
流暢的python 《流暢的python》第一天
我們看到 python 可以用len 或者arr 0 它們是怎麼實現的,其實就是兩個魔法方法 len 和 getitem 用撲克牌的例子學習一下,我們知道知道撲克牌有花色 黑桃,紅桃,方塊,梅花 有大小 2 10 jqka 如何創造一套牌的物件呢?首先學習collections的namedtuple...
學習《流暢的Python學習》 筆記02
1.2.2 字串表示形式 python 有乙個內建的函式叫 repr,它能把乙個物件用字串的形式表 達出來以便辨認,這就是 字串表示形式 repr 就是通過repr這個特殊方法來得到乙個物件的字串表示形式的。如果沒有實現repr,當我們在控制台裡列印乙個向量的例項時,得到的字串 可能會是 互動式控制...
學習《流暢的Python學習》 筆記03
2.8.1 用bisect來搜尋 import bisect import sys haystack 1 4,5 6,8 12,15 20,21 23,23 26,29 30 needles 0 1,2 5,8 10,22 23,29 30,31 row fmt defdemo bisect fn ...