Python基礎10 反過頭來看看

來源:互聯網
上載者:User

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!

 

我們已經從最初的“Hello World”,走到前兩講的物件導向,是該回過頭來看看,在我們的快速教程中,是否遺漏些什麼。

我們之前提到一句話,"Everything is Object". 那麼我們就深入體驗一下這句話。

 

首先,我們要介紹兩個內建函數,dir()和help()

dir()用來查詢一個類或者對象所包含的屬性(變數屬性和方法屬性)。你可以嘗試一下

>>>print dir(list)

help()用來查詢的說明文檔。你可以嘗試一下

>>>print help(list)

(list是Python內建的一個類,對應於我們之前講解過的表)

 

1. list是一個類

在上面以及看到,表是Python已經定義好的一個類。當我們建立一個表時,比如:

>>>nl = [1,2,5,3,5]

實際上,nl是類list的一個對象。

我們先實驗一些list的方法

>>>print nl.count(5)       # 計數,看總共有多少個5

>>>print nl.index(3)       # 查詢 nl 的第一個3的下標

>>>nl.append(6)            # 在 nl 的最後增添一個新元素6

>>>nl.sort()               # 對nl的元素排序

>>>print nl.pop()          # 從nl中去除最後一個元素,並將該元素返回。

>>>nl.remove(2)            # 從nl中去除第一個2

>>>nl.insert(0,9)          # 在下標為0的位置插入9

列舉了這麼多,就是讓大家對list作為一個類有一個概念。

(我在課程的最後會給出一個常用方法的附錄,有興趣的可以現在就查查看,網上有無比豐富的資源)

 

2. 通過list瞭解:運算子是特殊方法

當你使用dir(list)的時候,能看到一個屬性,是__add__。從形式上看是特殊方法(底線,底線),那麼它特殊在哪裡呢?

這個方法定義"+"運算子對於list的意義,也就是,當你將一個list的對象和另一個list對象相加時所會進行的操作。

>>>print [1,2,3] + [5,6,9]

運算子,比如+, -, >, <, 以及下標引用[start:end]等等,從根本上都是定義在類內部的方法。

我們先嘗試一下

>>>print [1,2,3] - [3,4]

會有錯誤資訊,說明該運算子“-”沒有定義。

現在我們繼承list類,添加對"-"的定義

class superList(list):    def __sub__(self, b):        a = self[:]     # 這裡,self是supeList的對象。由於superList繼承於list,它可以利用和list[:]相同的引用方法來表示整個對象。        b = b[:]                while len(b) > 0:            element_b = b.pop()            if element_b in a:                a.remove(element_b)        return aprint superList([1,2,3]) - superList([3,4])

(說明:內建函數len()用來返回list所包含的元素的總數)

內建函數__sub__()定義了“-”的操作:從第一個表中去掉第二個表中出現的元素。

(教程最後也會給出一個特殊方法的清單)

(如果__sub__()已經在父類中定義,你又在子類中定義了,那麼子類的對象會參考子類的定義,而不會載入父類的定義。任何其他的屬性也是這樣。)

定義運算子對於複雜的對象非常有用。舉例來說,人類有多個屬性,比如姓名,年齡和身高。我們可以把人類的比較(>, <, =)定義成只看年齡。這樣就可以根據自己的目的,將原本不存在的運算增加在對象上了。

 

3. 現在,你大概已經對Python已經有了一個基本概念。這也是這個快速教程的基礎部分的目的所在。你很可能躍躍欲試,想寫一些程式練習一下。相信這樣做會對你很有好處。但有一點請注意。Python的強大很大一部分原因在於,它提供有很多已經寫好的,可以現成用的對象。我們已經看到了內建的比如說list,還有tuple等等。它們用起來很方便。在Python的標準庫裡,還有大量可以用於作業系統互動,Internet開發,多線程,文本處理的對象。而在所有的這些的這些的基礎上,又有很多外部的庫包,定義了更豐富的對象,比如numpy, tkinter, django等用於科學計算,GUI開發,web開發的庫,定義了各種各樣的對象。對於一般使用者來說,使用這些庫,要比自己去從頭開始容易得多(所謂巨人的肩膀上)。

我會盡量在後面涉及各個庫。歡迎你的繼續關注。

 

歡迎你,來到Python的世界。

 

總結:

len() dir() help()

我們之前所說的資料結構list(表)實際上是一個對象,它有多個屬性。

運算子是方法

站在巨人的肩膀上

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.