首頁 後端開發 Python教學 Python直式學習路程

Python直式學習路程

Jun 23, 2017 pm 03:53 PM
python 學習 流暢 筆記

這一章中作者簡要的介紹了python資料模型,主要是python的一些特殊方法。例如__len__, __getitem__. 並且用一個紙牌的程式來講解了這些方法

 

首先介紹下Tuple和nametuple的區別:

Nametuple是類似於元組的資料類型。除了能夠用索引來存取數據,還支援用方便的屬性名稱來存取數據。

傳統的元組存取如下。對每個元素的存取都必須透過索引來找到。這種找法很不直觀

tup1=(,,)
tup1[1]
登入後複製

使用nametuple來建構:

tup2=namedtuple(,[,,])
t1=tup2(,,)
t1
t1.age
t1.height
t1.name
登入後複製
得到结果如下,namedtupel中tuple2是类型名,name,age,height是属性名字
登入後複製
从上面的访问可以看到,直接用t1.age的方法访问更加直观。当然也可以用索引比如t1[0]的方法来访问
登入後複製

 

namedtupe1也支援迭代存取:

t t1:
    t
登入後複製
和元组一样,namedtupel中的元素也是不可变更的。如果执行t1.age+=1。将会提示无法设置元素
登入後複製

Traceback (most recent call last):

  File "E:/py_prj/fluent_py.py", line 17, in

    t1.age+=1

AttributeError: can't set attribute

 

下面來看書中的紙牌例子,程式碼如下:

collections namedtuple

Card=namedtuple(,[,])

FrenchDeck:
    ranks=[str(n) n range(2,11)] + list()
    suits=.split()
    __init__(self):
        self._cards=[Card(rank,suit) suit self.suits
登入後複製
rank self.ranks]
    __len__(self):
        len(self._cards)
    __getitem__(self, position):
        self._cards[position]

__name__==:
    deck=FrenchDeck()
    len(deck)
    deck[1]
登入後複製

 

#首先定義了的紙牌元組Card, rank代表紙牌數字,suit代表紙牌花色。然後在FrenchDeck首先定義了ranks和suit的具體指。在__init__中初始化self._cards。

__len__回饋self._cards的長度。 __getitem__回饋具體的紙牌值。

結果如下,紙牌的長度為52,其中deck[1]為Card(rank='3',suit='spades')

可以看到len(deck)其實呼叫的是__len__方法。 deck[1]呼叫的是__getitem__

由於有了__getitem__方法,還可以進行迭代訪問,如下:

d deck:
    d
登入後複製

 

既然是可迭代的,那我們可以模擬隨機發牌的機制。

from random import choice
登入後複製
print choice(deck)
登入後複製

得到結果:

Card(rank='9', suit='hearts')

 

接下來看另外一個例子,關於向量運算的。例如有向量1 vector1(1,2),向量2 vector2(3,4)。那麼vector1+vector2的結果應該是(4,6)。 Vector1和vector2都是向量,如何實現運算呢。方法是__add__,__mul__

代碼如下:

vector:
    __init__(self,x=0,y=0):
        self.x=x
        self.y=y
    __repr__(self):
        % (self.x,self.y)
    __abs__(self):
        hypot(self.x,self.y)
    __bool__(self):
        bool(abs(self))
    __add__(self,other):
        x=self.x+other.x
        y=self.y+other.y
        vector(x,y)
    __mul__(self, scalar):
        vector(self.x*scalar,self.y*scalar)
登入後複製
__name__==:
    v1=vector(1,2)
    v2=vector(2,3)
    v1+v2
    abs(v1)
    v1*3
登入後複製

運算結果如下:

##在這裡__add__,__mul__,__abs__分別實現了向量加法,乘法,以及求模的運算。

值得一提的是__repr__的方法。這個方法是在需要列印物件的時候呼叫。例如print vector(1,2)的時候得到vector(1,2). 否則就是表示物件的字串:.這個__repr__和__str__的作用是類似的

 

 

<br>
登入後複製

以上是Python直式學習路程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

模板化的優點和缺點有哪些? 模板化的優點和缺點有哪些? May 08, 2024 pm 03:51 PM

模板化的優點和缺點有哪些?

Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2 Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2 Jul 01, 2024 am 07:22 AM

Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2

怎麼下載deepseek 小米 怎麼下載deepseek 小米 Feb 19, 2025 pm 05:27 PM

怎麼下載deepseek 小米

deepseek怎麼問他 deepseek怎麼問他 Feb 19, 2025 pm 04:42 PM

deepseek怎麼問他

evaluate函數怎麼保存 evaluate函數怎麼保存 May 07, 2024 am 01:09 AM

evaluate函數怎麼保存

NET40是什麼軟體 NET40是什麼軟體 May 10, 2024 am 01:12 AM

NET40是什麼軟體

deepseek該怎麼搜索 deepseek該怎麼搜索 Feb 19, 2025 pm 05:18 PM

deepseek該怎麼搜索

瀏覽器插件是什麼語言寫的 瀏覽器插件是什麼語言寫的 May 08, 2024 pm 09:36 PM

瀏覽器插件是什麼語言寫的

See all articles