流暢的python學習1

2022-02-24 10:00:20 字數 2941 閱讀 2082

#

!/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()

print

(len(deck))

#example1

from random import

choice

choice(deck)

print

(choice(deck))

#__getitem__

for card in

deck:

print

(card)

for card in

reversed(deck):

print

(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):

print

(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:

print

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