1. 程式人生 > >《python核心程式設計》學習筆記

《python核心程式設計》學習筆記

第一本python基礎的書籍《python核心程式設計》,不管看不看得懂,都去看了,怕堅持不下來,沒做章節後面的題目,最多也只是對著章節裡的例子程式敲敲程式碼。把自己覺得重要的東西記下來。看完一遍可能也消化不了30%,看完一遍之後,我不大願意再重新去深究裡面看不懂的內容,希望再找幾本經典的python書籍去學習,可能看的書多了,再去學習比較那些看不懂的地方,翻翻以前的書,這樣更有意義。

       《python核心程式設計》,主要讓我瞭解了python要處理的各種物件,數字,字串,列表,元組,字典,集合,檔案,函式,方法,類,模組等。還有對這些物件如何操作,操作的方法有包括 操作符、操作函式、物件自帶的內建方法及屬性等。下面是一些章節的筆記。


1、開始學一門新語言,儘量做筆記,把想弄明白的知識點和疑問點記下來。

2、慾望和好奇,是激發主動學習,儘快掌握知識的有效途徑。平鋪直敘的去看一本書,看著看著在哪裡卡殼了,看不進了,就容易放棄。所以看書,不一定要從頭到尾,重點是弄明白你想知道的東西,心裡要清楚,然後去查詢資料。解決的問題點多了,慢慢積累,也就會了。

3、教程重點是提供一些知識點,自己主動到網上找資料,看大家的說法,自己從收集、選擇、領悟到貫通,從不知道到知道,這就是主動,可能這也是樂趣的所在。

4、程式語言是一門方法,方法有自己的規則,有規則就有自己的定義,有定義就要明白它的概念。我們從概念入手,在本教程並沒有很多程式例子,一開始既要學習內容,又要搞明白例子,這樣太累,我們儘量做到看看就可以了,要動手的話,在

python軟體裡寫寫一些運算子,函式表示式,或者其它什麼的好了。以後,程式例子一定要自己動手寫的,學了本教程之後吧,可能會花幾倍的時間在寫上。

5、希望是多快好省的先去入門。


1python起步

1、python能做什麼

伺服器端程式設計,開發網站。系統網路運維,管理、監控、釋出系統。ƒ科學與數字計算,影象視覺化、生命科學、金融量化分析。3D遊戲開發。圖形介面開發,編寫桌面使用者介面。網路程式設計,網路技術開發。其它等。

看看python是不是很好用呢,心裡對應一下,自己學python要做什麼。

2、安裝python,到官網:https://www.python.org/downloads/

  上下載,有不同的版本,怎麼安裝,花點時間,自己網上搜索怎麼安裝,主動去找。

3裝好python之後,網上查一下IDE ,什麼是IDE,就是整合開發編輯器,目的就是為了更好更方便的寫python程式,可以下載像pycharmsublime text等。


章2:python物件

現在要開始學習python了,我們想什麼東西是和python直接相關的呢,學習python從什麼開始呢。語言python是一種方法,也是一種工具,那麼這個工具是和什麼東西打交道的。什麼東西讓python有用武之地的,看看我們的鍵盤,有數字,有字母,有符號,python處理的就是這些東西,這裡我們引入了物件。

1、python物件

Python要處理的物件有:數字,字串,列表,元組,字典,集合,檔案,函式,方法,類,模組。

數字:很明顯,像 13.5-0.5

字串:用引號表示,’123’ ,  ’rfv’,  ’myname888’ 

列表:用[  ]表示,[1 , 3 , a , ‘wsx’]

元組:用( )表示,(1 , 3 , a , ‘wsx’)

字典:用{  }表示,{‘name’ : ‘peter’ , ‘score’ 98’sex’ : ‘male’} 裡面有key值,value值,一一對應。

集合:用[  ]表示,但裡面只有key值,沒有value值。

檔案:既是儲存在磁碟等地方的資料物件,可以理解為連續的位元組序列。

★函式:pyhon裡自帶的像cos(), tan()等, 還有用def 語句定義的一段,作為自定義函式。

★方法即物件自身所帶的內在一種處理方式,類似於屬性。

★類:面向物件程式設計的重要概念,用class 語句定義一段,作為類。

模組:把相類似,相同的功能的函式放在一起,就是一個模組,上一節中講python可以做很多事情,不同的事情,就呼叫不同的模組。比如做網站開發,和做資料分析,就呼叫不同模組了。

2Python物件分類

按不同原理分,有資料型別、儲存模型、更新模型、訪問模型。

自己網上理解 (數字,字串,列表,元組,字典,集合 )各自如何對應的。

3Python物件的操作

有了物件,那我們就要對它們進行處理,那如何處理的呢,每種物件都有如下幾種操作方式,①用操作符,②用操作函式,python自帶的函式或自定義函式,③用內建方法,④用內建屬性,在以後章節裡針對不同物件,會詳細分析。

比如1

>>> 5 + 3  ,其中就是操作符,

比如2

List = [1 , 3 , a , ‘wsx’]

Del  list[]

List.remove()

用這兩個操作手法,都可以把list中的元素刪除,就像一個人感冒了,一種是外部用藥把它治好,一種是自身參加鍛鍊使它變好,兩種一個用操作函式,一個是用內建的方法。注意書寫格式就不一樣了哦。


章3:python數字

Python的第一個操作物件就是數字。

數字是具有標量存貯,直接訪問,不可更改特點的型別。

1、數字的分類:整型,長整型,布林型,浮點型,複數。

整型:32-5,等很明白。

長整型:一串數字後加一個大寫的L表示,999999999999L

布林型:就是兩個值,TrueFasle

浮點型:0.33,  0.0, -8.7 

複數:1.33+2.3j,具有虛部和實部的數。

2、對數字的操作

①操作符:, ,還有位運算子,對於這些操作符網上查資料自己熟悉,可以在python軟體裡,簡單的用這些符號運算,增加影響。

②操作函式:是python軟體內部已經定義好的函式,也叫內建函式。在網上自己找能夠處理數字的內建函式有哪些,增加印象,並知道這個函式功能。下面舉一些例子:

密指數運算,23次方,用操作符**表示,2**3, 用內建函式表示pow(2,3)

還有取絕對值函式abs() , 取餘運算divod(), 型別轉換函式hex(),chr(),ord()等等。

自己去查這些函式,並且知道不同的函式括號()裡面需要填什麼內容,這個都有規定。

③用內建方法:有些數字可以用內建方法對它進行處理,比如複數。

舉例:aComplex = -8.3-1.47j ,那麼我們要知道這個複數的實部,虛部是多少,而且要知道它的共軛複數是多少。就用內建方法: aComplex.real  回車得到-8.3 aComplex.imag  回車得到-1.47 ,求共軛用 aComplex.conjungate()  回車得到-8.3+1.47j

有什麼相關的內建方法,自己網上查詢,增加印象。

3、內建方法和屬性

★以後在python的程式中經常看到xxx.xxx, 這樣的格式,這種表達就叫屬性或者內建方法,object.attribute ,前面object是物件,後邊attribute是屬性或方法。比如一個人有眼睛,而且會跑步,那麼眼睛和跑步就是這個人的屬性或方法。可以表示為man.eye  , man.run()  

屬性和方法的概念和運用非常重要,查相關的資料自己先熟悉起來。

4、__xxx__

以後在程式中,又會看到很多這樣的格式  _xxx  ,  __xxx  ,  __xxx__  ,  __xxx__() ,會覺得比較難理解,他們代表什麼意思呢,他們可表示變數和函式,只是代表了不同含義的變數和函式,留一個題目,仔細查查這種表示式的各種說法。可能需要好幾天的時間去消化的。


章4:python序列

序列定義:它們的成員是有序排列的,並且可以通過下標訪問一個或幾個成員,這種型別統稱序列。

序列包含:字串、列表、元組。

序列裡各個成員的訪問方式:①指定下標或偏移量訪問每個成員,②利用切片訪問多個成員。

比如:str = ‘wefgaggh’  我們得到,用str[2] 。要得到efga, str[1:4]  為什麼這麼用,網上查詢序列下標和切片的相關內容,加深印象。

 1、字串,是一種不可變型別,也就是說改變字串裡的某一個元素,就要新建立一個新的字串。Python裡沒有字元這種型別,可以把字元看成是字串的特殊形式。

 ①操作符:連線符(+) ,比較符 (<  ,  > , !=)  等,還有上面提到的切片操作符,成員操作符(in ,not in),字串格式化操作符(%),

 ②操作函式:對字串可操作的函式有很多,cmp() , len() , str() , unicode(), 還有很多其它的,自己找出來理解。

 ③用內建方法:舉幾個例子,更多的可以查詢。

 ④unicode字串:什麼是unicode , 什麼是ASCIIUnicode碼值是ASCII碼值的升級。

2、列表,是能存貯任意數目的,各種python物件的,靈活容易,是一種可變型別。

①操作符:連線符(+) ,比較符 (< , > , !=)  等,還有切片操作符,成員操作符(in ,not in),列表解析。重點理解什麼是列表解析。

②操作函式:對列表的操作函式有,cmp() , len() , sorted(), reversed(), sum(),還有其它,找出來理解。

③用內建方法:舉幾個例子。

④用列表構建其它資料結構:利用列表的容器和可變性特點,構建堆疊和佇列。什麼是堆疊,什麼是佇列。

3、元組,是裡面內容不可變,的一種容器。

①操作符:連線符(+) ,比較符 (< , > , !=)  等,還有切片操作符,成員操作符(in ,not in)。

②操作函式:對元組的操作函式有,cmp() , len() , max(), min(), 等等。

③用內建方法:由於其不可變型別,相似於字串。

4、深拷貝和淺拷貝:拷貝python物件時,拷貝整個物件叫深拷貝,不拷貝物件,只拷貝這個物件的應用,叫淺拷貝。淺拷貝copy() ,深拷貝deepcopy()


章5:python字典和集合

1、字典是python語言中唯一的對映型別,裡面包含鍵(key)和值(value),對映型別裡雜湊值(鍵)和指向的物件(值)是一一對應的關係。什麼是雜湊表,雜湊表與字典的關係。

字典裡的key必須是可雜湊的。

①操作符:比較符 (< , > , and)等;鍵查詢操作符d[key],對key所對應的value操作;成員操作符(in ,not in)。

②操作函式:對字典的操作函式有,cmp() , len() , dict(), hash(), 等等。

③用內建方法:舉一些例子。

2、集合,是一組無序排列可雜湊的值,裡面沒有相同的元素。集合的成員可作為字典的鍵,集合有可變和不可變之分。

①操作符:比較符 (< , > , == < , &)等成員操作符(in ,not in)等,

②操作函式:對集合的操作函式有,set() , len() , frozenset(), 等等。

③用內建方法


 6python檔案和輸入輸出

 1、檔案,不僅可以訪問普通的磁碟檔案,也可以訪問其它任何型別抽象層面的‘檔案’,一旦設定好合適的‘介面’,你就可以訪問檔案型別的物件,就好像訪問普通檔案一樣。

檔案,是連續的位元組序列,資料傳輸就是用位元組流,無論位元組流是由單個位元組還是大塊位元組組成。

 操作函式,open()函式是開啟檔案之門的‘鑰匙’,開啟檔案後返回是一個檔案物件,為後面提供輸入/輸出(I/O)操作的介面。

Open()基本語法: file_object = open(file_name , access_mode=’r’ , buffering= -1 ), 開啟模式有’r’ ‘w’ ’a’ 

 檔案開啟之後,有4類方法可以對檔案操作:輸入、輸出、檔案內移動、及雜項操作。

①輸入 f.read()   f.readline()   f.readlines()

②輸出 f.write()   f.writelines()

③移動 f.seek()

④其它 f.close()

 2、檔案系統模組,對檔案系統的訪問是大多通過pythonos模組實現,是python訪問作業系統的功能的主要介面。

 3、其它和檔案、輸入輸出有關的模組。


7python函式和函數語言程式設計

1、函式,是對程式邏輯進行結構化或過程化的一種方法,能將整塊程式碼巧妙的整合成易於管理的小塊。

2、函式的呼叫,函式呼叫後會返回3種類型,①不顯示返回任何東西,沒有返回值,返回型別用none表示,②大多數函式會返回一個值或者物件,即object, ③有些會返回多個值或物件,但python把它們聚集起來,以一個元組的形式返回,也算是返回單個物件,tuple

3、函式的引數,有①位置引數(必選引數)  ②預設引數  ③可變長度引數組,又分為非關鍵字引數組(元組)和關鍵字引數組(字典)。

4、函式的屬性,是python另外一個使用了句點屬性標識的,並擁有名字空間的領域。

比如:def bar(): pass   #定義函式

      Bar.__doc__     #函式一個屬性

5、內嵌函式,在一個函式體內建立另一個函式。最直接的方法,就是在外部函式定義體內,定義內部函式;還有一種方式就是使用lambda語句。如果定義內部函式時,包含外部函式物件的引用,甚至這個物件可以在外部函式之外,那這個函式就被叫閉包。

6、函式裝飾器,主要思路源自python面向物件程式設計。以@開頭,接著是裝飾器函式名稱和引數,然後是被修飾的函式和引數。

   @deco2

   @deco1

   def fuc(arg1,arg2,...):pass

等價於:

   def fuc(arg1,arg2,...):pass

   fuc=deco2(deco1(fuc))

 裝飾器可分為有參裝飾器和無參裝飾器。上面的為無參裝飾器,下面為有參。

   @deco2(deco_arg)

   @deco1

   def fuc(arg1,arg2,...):pass

等價於:

   def fuc(arg1,arg2,...):pass

   fuc=deco2(deco_arg)(deco1(fuc))

 7、函式可以怎麼用,①函式可以被訪問的,②函式可以像賦值語句一樣,賦值給其它變數,③把函式作為引數傳遞給其它引數,④可以作為列表、字典容器的其中元素。

   函式有一個獨一無二的特徵,區別於其它物件,就是函式是可呼叫。

 8、python不是一種函數語言程式設計語言,但它支援很多有價值的函數語言程式設計構架。Python提供4種內建函式和lambada語句來體現函數語言程式設計。內建函式:apply() , filter() , map() , reduce() 。 Lambada表示式。

 偏函式:當函式的個數太多,需要簡化時,建立一個新函式(偏函式),這個新函式可以固定原來函式的部分引數,也就是設定成預設引數,這樣起到更簡單的呼叫。

 9、函式變數的作用域,全域性域與區域性域,對應變數為全域性變數和區域性變數。閉包的作用域。

其它函式比較特殊的函式,遞迴函式、生成器等。


章8python模組

1、模組,是存貯一些有組織的程式碼段,程式碼段可能是一些擁有資料成員、方法等內容的類。也有可能是一些操作函式,把其它模組的特性引入到你模組中的操作叫匯入。

2、名稱空間,每個物件都有一個名稱,模組有名稱、函式有名稱、類也有名稱,這些名稱的集合叫名稱空間,名稱空間和存在的物件有一一對應的對映關係。可以向名稱空間,新增名稱,將繫結的識別符號(名稱)指向這個物件。名稱空間有:區域性名稱空間,全域性名稱空間,內建名稱空間。

3、名稱空間與變數作用域的關係。名稱空間純粹意義上是指,名字和物件之間的對映關係。作用域是指使用者的程式碼在哪些物理位置可以訪問到這些名字,而在另外一些地方可能就訪問不到這個名字。在將來遇見名稱空間時想想“它存在嗎”,遇到作用域的時候想想“能看見(訪問)到它嗎”。

4、模組的匯入

①Import 模組名  如: import moudle

②import 模組名 as 模組名簡稱  如:import moudle as md

③from 模組名 import 指定某個屬性 如:from moudle import name

5、模組的內建函式有__import__() globals() locals()reload() ,

6、包,是一個有層次的檔案目錄結構,定義了一個由模組和子包組成的python應用程式執行環境。與類和模組相同,用句點屬性來訪問包中的元素。


章9python類

類,是面向物件程式設計的一個重要思想,面向物件程式設計兩個主題:類和類例項。

1、與類相關的其它模組及文件

Userlist:對列表進行封裝,類定義的一個模組。

Userdic:對字典進行封裝,類定義的一個模組。

Userstring:對字串進行封裝,類定義的一個模組。

typespython物件所有型別在直譯器中的名字,一個封裝模組。

Operator:標準操作符的函式介面模組,比具體操作符更通用。

這些模組主要用處是提供給使用者所需要的功能,不必自己動手去實現它們,可以作為基類,提供子類化和進一步定製的功能。

其它文件可以參考python其它手冊。

2、元類,是類中最難理解的概念。元類創造了類,類創造了例項。元類    類    例項。

程式設計師在程式設計時,只需建立類,而無需建立或使用元類,您在建立類時,僅僅是運用了元類所提供的建立類的預設模版方式。建立一種風格的類,就是運用了系統自己提供的一種元類的預設方式。所以元類的話題,僅僅是面向物件理論化或思想上的範疇。

在執行類定義時,元類通常會傳遞三個引數到構造器:類名、從基類繼承資料的元組、類的屬性字典。

3、新式類和經典類。

Python2.x以前版本預設的都是經典類,只有顯式繼承了object才是新式類。

Python3.x 以後版本都是新式類,無需顯式繼承object

新式類的演算法按C3演算法(類似廣度優先演算法),經典類的演算法按照深度優先。

新式類有相同的父類只執行一次建構函式,經典類會重複執行。

新式類新增__slot__內建屬性,__getattribute__()方法,以及相關的描述符__get__(),__set__(),__delete__().

屬性和property()內建函式的關係。

4、類如何建立,建立時需要用到的一些方法(類構造器)。

   1)基本構造器__init__() , __new__() , __del__() , 等等。

   2)物件比較器__cmp__() , __lt__() , __gt__(),等等。

   3)屬性操作器__getattr__() , __setattr__() , __delattr__() , 以及上面提到的操作符,等等。

   4)數值型別操作器 __*add__(), __*sub__() , __*and__() , __*or__() , __invert__() , __complex__() ,

      __hex__() , index__() , 等等。

   5)序列型別操作器 __len__() , __getitem__() , __getslice__() , __iter__() , 等等。

   6)對映型別構造器 __hash__() , __getitem__() , __missing__(), 等等。

5、類、類例項、以及其它物件的操作函式。

   Issubclass() , isinstance() , hasattr() , getattr() , setattr() , delattr() , dir() , super() , vars() ,等等。

6、子類的繼承和派生

7、靜態方法和類方法

8、方法的呼叫

★9、相關概念:類、類例項、類的屬性、類例項屬性。