語法糖(Syntactic sugar)是英國計算機科學家彼得·約翰·蘭達發明的一個術語,指計算機語言中添加的某種語法,這些語法沒有給程序增加新功能,但是對於程序員更“甜蜜”。語法糖提供了更易讀的編碼方式,可以提高開發效率。
Python語法糖總結:
1、匿名函數(lambda表達式)
用在不能定義函數的地方,作為一個表達式,實現了函數的功能。
2、過濾(filter)、映射(map)、化簡(reduce)、排序(sorted)
過濾(filter):選擇列表中的某些元素,並過濾掉其他元素。接受一個函數和一個序列,函數作用於序列的每個元素,根據返回值是True還是False決定是否保留。filter函數返回一個迭代器(Iterator),可以用list函數獲取所有結果並返回列表。
映射(map):將一個函數對應到一個序列的每個元素上。接收一個函數和一個可迭代對象,返回一個迭代器。
化簡(reduce):將一個序列的元素值合起來到一個單獨的變量。接收一個函數和一個序列,把函數作用在序列上。函數必須有兩個參數,reduce按順序處理,前面處理結果和下一個元素繼續處理。reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
排序(sorted):將一個序列按順序排列。接收三個參數,第一個可迭代對象,第二個key函數自定義排序規則(比如key=abs按絕對值,key=str.lower忽略大小寫只按字母順序),第三個reverse=True反向排序。返回一個列表。
3、裝飾器(Decorator)
不修改函數定義,而給函數增加功能(常用的用途有輸出日志、記錄開始和結束時間)
AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程
簡單裝飾器
一個參數的裝飾器
多個參數的裝飾器
4、偏函數(partial函數)
函數需要兩個參數,只有一個參數已知,可以定義一個partial函數傳入已知參數,待未知參數確定可以直接用調用單參數函數。
5、with的用法
6、迭代器與生成器??
兩個值求最大最小值:a3 = [a1, a2][a1 < a2](相當於:a3 = [a1, a2][int(a1 < a2]),利用列表下標和True=1、False=0的對應關系來取值)
列表生成式和生成器
列表生成式:[s1 + s2 for s1 in 'abc' for s2 in 'xyz' if s1 != 'a']
得到:['bx', 'by', 'bz', 'cx', 'cy', 'cz']
生成器,可以直接把列表生成式改造成生成器(中括號改為小括號),或生成器函數用yield返回值,以下為斐波那契數列生成器:
def fib(max):
n, a, b = 0, 0, 1
while n<max:
yield b
a, b = b, a+b
n = n+1
return 'done'
for n in fib(6):
print(n)
閉包(Closure,別的語言也有):注意返回函數不要引用任何循環變量,或者后續會發生變化的變量。