《python學習手冊》學習筆記

python格式化傳參數非常贊,用數字標明位置,值得java學習

for這種迭代語法很強大,有函數式編程的範兒

python用none來表示null

爲什麼散列能最快速的搜索

字典是無序的

字典的updateshi是合併的意思

字典的for迭代的是來key

帶默認值的get方法避免找不到是一個不錯的做法

literal是字面值爲什麼要翻譯成長量呢?

zip這個函數很有意思

用到for叫解析

視圖是啥東東?

將元組和文件放一起,這結構組織的很無語…

文件分是讀寫分離的

pickle可以看成序列化和反序列化工具

python中用模塊來表示jar包的概念

struct用來協助做序列化和反序列化的

python中的內置函數是這種非面向對象的做法可以使代碼更簡潔

簡單的說,==對應java中的equals,is對應java中的==

在所有判斷中出現的對象只有兩種可能的結果:真和假

python的動態性使得我們儘量不要使用type

pass這個東西很有意思,用來佔位的,和字面的意思貌似沒關聯

常用的函數都被定義成內置的了

語句和內置函數是有區別的

python可以讓人少打字^0^

省略括號,結尾用冒號是一個坑爹的寫法,因爲大部分語言都不會這樣寫

python的一大特色就是用縮進來表明代碼塊的結構,這個也用來避免大塊大塊的程序塊的寫法,因爲沒有很好的可讀性

裏面舉的採用縮進導致的陷阱例子我覺得采用大括號就能很好避免。

我不認爲python去掉各種括號和結尾的分號能提高使用者的開發效率。

判斷之後的冒號可以和case中的冒號相提並論

python會將異常用來做判斷

else是一個萬能的關鍵詞

賦值可以成組成組的進行

特性很好理解,而怎麼用還得多加練習才能融會貫通,才能算精通。

一些原語修改對象的方法返回的是none

參數自身除了有位置信息還有名稱信息,這一點也不錯,方便更靈活傳遞參數

print函數更適合面向對象控的口味

stdout可以看成水龍頭,可以外接各種水管,即各種實現了write方法的對象

爲了簡潔python無所不用其極,連elseif都要簡寫爲elif, python代碼的可讀性值得懷疑

python的swith case被if else 幹掉了。字典又把if else幹掉了。

三元運算也可以用and or 來實現。但是不好理解,只能針對bool

bool值會轉換成0,1,這個可以用在兩個值的列表中

因爲沒有大括號,只好用pass來表明一個空塊。也可以認爲是一個空實現或待實現

循環中的else也是爲了去避免使用判斷標誌。

for一般和序列結合使用,用來遍歷序列

zip很難讓人將其與並行聯繫起來

zip的一個作用就是將key,value列表配對成字典

enumerate實際上是將一個list轉換成一個map,其key爲位置

把表達式放到for循環的前面就成了列表解析,這個也是循環遍歷一種更簡化的寫法

簡化代碼,隱藏細節是所有編程語言必須遵守的一條原則

列表解析比循環遍歷更高效,因爲它會直接翻譯成c語言

如果列表解析寫的太複雜則可讀性就會很差,比如多層循環嵌套

迭代協議是從左到右遍歷列表元素

列表解析的另一種形式就是map內置函數

迭代協議是一切容器處理的基礎

突然發現all和any是一對反義詞

join和split也是一對反義詞

*可以理解爲正則表達式中的*用來表示一個和多個

zip的zip就是unzip

zip就是將多個列表按列重組

查詢幫助叫dir,字典容器叫dict

原語修改的函數不會結果

使用函數的最終目的就是爲了重用,降低代碼的複雜度

函數也是對象,函數名就是函數的變量

def實際上是創建一個函數對象並賦值給一個函數變量

函數也是對象,這個跟js很想

支持操作符重載這一點很像c++

動態性導致我們必須通過測試來發現錯誤,而不是編譯器。

builtin相當於java.lang

內部使用外部變量用global或nolocal

由於變量在使用的時候聲明,所以用global來標明這是個全局變量,但是儘量別這樣做

全局變量可以作爲與其他程序連接的紐帶,比如多線程,通過全局變量來共享數據。

嵌套函數會讓程序變得複雜,降低可讀性

簡單的嵌套函數就是所謂的lambda

nonlocal一般在嵌套函數中常見,用來在嵌套函數中的使用上層函數中的變量。

非定長參數*args
將參數解析成字典**args
這些都是爲了解決不定參數的問題,最終是爲了讓python這種語言更具有動態性。即不僅參數類型是可變的,參數個數也是可變的,動態的。

keyword-only這種參數,表示變長參數後面的參數必須都給出參數名,而且在調用的時候是必須出現的,除非函數定義的時候給定了默認值

關鍵字參數對函數會非常方便,爲什麼java沒有?

一般遞歸都可以改寫爲循環

簡單的說,lambda就是匿名函數,而且是簡單的表達式函數,用來處理簡單的任務

匿名函數是提高代碼可讀性,簡化代碼的利器

map函數就是用來對序列中的每一個元素執行指定的函數,至於是不是並行不知道。

reduce將對一個列表進行聚集

filter對一個列表進行過濾

列表解析是封裝在一個列表中的,因此它的返回結果是一個列表

yield是future嗎?不是,而是一個延遲迭代器。

用來創建迭代表達式的都可以看成生成器表達式

這種表達式有一個好處就是可以邊迭代邊計算,對於大結果集的幾圈遍歷非常有利。

生成器表達式和函數的區別就像匿名函數和函數的區別

zip太難記了,可以理解爲將多個列表打包成一個新的包含多個元組的列表

兩個列表用zip可以用來構造一個字典

生成器可以邊解析邊迭代,速度慢但是對內存的佔用小

elapsed是個不錯的變量用來命名消耗時間

yield是一個和return類似的關鍵詞

python沒有私有和公有的概念,所有屬性和函數方法都是公有的, 當然我這個是針對模塊。

一個文件就是一個模塊。

模塊的導入過程也是一個賦值的過程

reload可以讓修改立即生效。

__init__文件用來放加載包時的初始化內容。

python的import機制爲何沒java的來的瞭解,非得還使用一個from

爲了能用於大型應用中,出現了包的概念,用來組織和管理大量的代碼。

貌似因爲python基礎庫沒有很好的包結構,導致了相對導入的出現

當前路徑下得模塊會被優先選擇 。

__all__指定要暴露的內容,_x用來表明私有的東西

主程序中通過__main__來指明要執行的程序

__name__是一個標識,用來告訴模塊當前以什麼方式在執行。

as是別名的意思

__打頭的屬性都是內置的

重載模塊不具有傳遞性

from表明導入的變量是拷貝

__init__是構造函數

模塊很像類,而from相當於創建了一個模塊的副本,類似於對模塊做實例化,reload相當於重新實例化

代碼塊就像寫信一樣,一行必須以冒號結束,類似寫信的稱呼,後面就是具體內容。

類的靈活性體現在可以直接給屬性賦值,沒有私有公有的概念,直接通過給一個新屬性賦值創建新屬性。

python不習慣類和模塊首字母大寫?

只有在類涉及到與基本類型進行一些常規運算的時候才應該考慮運算符重載

一段代碼塊(類,方法等)不允許爲空,如果需要可以用pass來標識

類沒有實例也可以當對象來用,只是裏面的屬性和方法相當於是靜態的

類和實例都可以通過內部字典__dict__來訪問屬性和方法,但是二者是分開獨立的,沒有繼承關係。

空類可以用來模擬字典

類中的self使用太多了

調用父類方法:使用類去調用方法傳入self實例
屬性不需要定義,但必須在初始化方法中掛在self下。而且在類的任何地方使用都必須通過self來調用。

python沒有new這個關鍵字,直接類加括號創建實例

python中的序列化工具叫pickle

通過類修改屬性會影響所有的實例的屬性值,而通過實例只會影響實例本身

類變量和實例變量即使相同也是兩個不同的變量,互不干擾
實例方法的調用內部會翻譯成類方法的調用,並且將實例作爲類方法的第一個參數。

不存在不傳實例(self)的靜態方法

操作符重載本質上還是對基本類型的操作符調用,只不過用類做了一個層封裝

__iter__每次返回同一個對象則是公用迭代器,否則就是不同的迭代器

操作符重載相當於內部定義的一套公共的接口列表,任何類都可以實現這些接口。比如類似java中的比較器,迭代器接口

python沒有提供私有屬性的關鍵詞或者描述符,但是可以通過重載運算符來實現,好麻煩的說

__call__相當於構造函數的重載,區別在於構造函數是在類上調用,而前者還能在實例上調用。另外一個功能就是可以將類當成一個函數使用,但是有一個好處就是可以保存狀態
操作符重載的規律:一般內部還是執行的某個屬性與參數的操作符運算。重載方法只是一個代理而已。

類中的函數定義應該看成變量的定義,即 將一個函數和一個變量關聯起來。這樣就可以很好理解重載了,名字只能跟一個函數關聯

__真是一個神奇的前綴

類中的實例方法可以作爲對象賦值,在其他地方調用,相當於別名的意思

爲什麼要多重繼承,就像一個人可以是工程師,作家一樣

__method相當於一個私有方法

多重繼承可以看成多個內的混合

python可以在實例動態添加屬性

函數可以直接作爲方法的註解,前提是該函數接受一個方法做參數,比如staticmethod,而且返回的是一個可調用對象。因此這個不僅可以看成註解,還可以看成包裝,或者裝飾。

給類的實例屬性賦值,類也能訪問該屬性

異常可以看成goto

捕獲到異常,則先執行異常再執行finally,沒捕獲到則先執行finally再拋出異常

python使用異常來控制流程,導致並非所有的異常都是錯誤(但是所有的錯誤一定是異常),愛奇藝。比如用異常來判斷是否到達文件末尾

with/as是try/finally的簡化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章