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__是指一個類允許的屬性列表。