python進階 廖雪峰(慕課網)


1.函數式編程

變量名可以指向函數,那么函數就可以通過一個變量傳遞給另一個函數或者變量。

map()函數:接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的list 並返回。(注意不改變原有的list)

reduce()函數:接收一個函數 f 和一個 list,傳入的函數 f 必須接收兩個參數,reduce()對list的每個元素反復調用函數f,並返回最終結果值,reduce()還可以接收第3個可選參數,作為計算的初始值。

filter()函數:接收一個函數 f 和一個 list,函數 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。

自定義排序函數:sorted()函數默認對list從小到大進行排列。sorted函數的作用是接受一個比較函數對序列進行排列,而這個比較函數會根據返回值是-1,就會把 x 排在 y 前面,返回值是1,就會把 x 排在 y 后面,返回值為0,就把兩者並排。sorted()也可以對字符串進行排序,字符串默認按照ASCII大小來比較。

Python中返回函數:Python的函數不但可以返回int、str、list、dict等數據類型,還可以返回函數。 打印時需要注意返回值從而判斷 print f 還是 print f()。

Python中閉包:內層函數引用了外層函數的變量(參數也算變量),然后返回內層函數的情況,稱為閉包(Closure)。返回函數不要引用任何循環變量,或者后續會發生變化的變量。

Python中匿名函數: lambda x: x * x ,關鍵字lambda 表示匿名函數,冒號前面的 x 表示函數參數。strip()方法語法:str.strip([chars]);chars -- 移除字符串頭尾指定的字符序列。

Python中decorator裝飾器:

本質上就是一個高階函數,它接收一個函數作為參數,然后,返回一個新函數。

使用 decorator 用Python提供的 @ 語法,裝飾器顧名思義就是起到裝飾作用,即進行一些類似日志、運行時間的統計,其本質為內嵌套函數。

對於自適應任何參數定義的函數,可以使用Python的 *args 和 **kw,就這兩個放在參數位置即可保證任意個數的參數總是能正常調用。

帶參數的裝飾器,帶參數的log函數首先返回一個decorator函數,再讓這個decorator函數接收my_func並返回新函數,之后再裝飾器函數中進行例如log、計算運行時間等實現。Py

Python中偏函數:可以簡化參數。當一個函數有很多參數時,調用者就需要提供多個參數。如果減少參數個數,就可以簡化調用者的負擔。

 

Python中的模塊

模塊和包的概念:模塊是一個Python文件,包是一個文件夾。Python包里面有一個_init._.py文件,用來和普通目錄做區別。

導入模塊:improt導入模塊       from logging import log導入模塊中的一個函數           from logging import log as logger給導入模塊的函數起一個別名 

動態導入:先嘗試從cStringIO導入,如果失敗了(比如cStringIO沒有被安裝),再嘗試從StringIO導入。提高運行速度。

try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO

__future__:當新版本的一個特性與舊版本不兼容時,該特性將會在舊版本中添加到__future__中,以便舊的代碼能在舊版本中測試新特性。from __future__ import division

安裝第三方模塊:pip    www.pypi.python.org

 

面向對象編程

Python中初始化實例屬性:_init__() 方法的第一個參數必須是 self(也可以用別的名字,但建議使用習慣用法),后續參數則可以自由指定

Python中訪問限制:如果一個屬性由雙下划線開頭(__),該屬性就無法被外部訪問。(__xxx__)除外

Python中創建類屬性:如果在類上綁定一個屬性,則所有實例都可以訪問類的屬性,並且,所有實例訪問的類屬性都是同一個!也就是說,實例屬性每個實例各自擁有,互相獨立,而類屬性有且只有一份。

Python中類屬性和實例屬性沖突:當實例屬性和類屬性重名時,實例屬性優先級高,它將屏蔽掉對類屬性的訪問。注意:千萬不要在實例上修改類屬性,它實際上並沒有修改類屬性,而是給實例綁定了一個實例屬性。

Python中定義實例方法:實例的方法就是在類中定義的函數,它的第一個參數永遠是 self,__init__(self, name)其實也可看做是一個特殊的實例方法

Python中方法也是屬性: class 中定義的實例方法其實也是屬性,它實際上是一個函數對象, types.MethodType(函數,實例,類) 把一個函數變為一個方法  p1.get_grade = types.MethodType(fn_get_grade, p1, Person)

Python中定義類方法:通過標記一個 @classmethod,該方法將綁定到 Person 類上,而非類的實例。類方法的第一個參數將傳入類本身,通常將參數名命名為 cls

 

類的繼承

Python中繼承一個類:函數super(Student, self)將返回當前類繼承的父類,即 Person ,然后調用__init__()方法,注意self參數已在super()中傳入,在__init__()中將隱式傳遞,不需要寫出(也不能寫)

Python中判斷類型:函數  isinstance(變量,類型)   可以判斷一個變量的類型

Python中多態:需要深入學習

Python中獲取對象信息:type() 函數獲取變量的類型, dir() 函數獲取變量的所有屬性,dir()返回的屬性是字符串列表,如果已知一個屬性名稱,要獲取或者設置對象的屬性,就需要用 getattr() 和 setattr( )函數

 

定制類

Python中定義了__str__()和__repr__()兩種方法,__str__()用於顯示給用戶,而__repr__()用於顯示給開發人員。__repr__() = __str__()

Rational類雖然可以做加法,但無法做減法、乘方和除法,請繼續完善Rational類,實現四則運算

Python的@score.setter是前一個@property裝飾后的副產品。

Python如果要限制添加的屬性,__slots__是指一個類允許的屬性列表。

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM