【廖雪峰Python学习笔记】高阶函数
生活随笔
收集整理的這篇文章主要介紹了
【廖雪峰Python学习笔记】高阶函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Higher-order function
- 高階函數(shù)
- 映射
- 過濾算法
- 排序算法
高階函數(shù)
- 變量可指向函數(shù)
>>> abs # 函數(shù)
<built-in function abs>
>>> abs(-0) # 函數(shù)調(diào)用
0
>>> func = abs # 變量可指向函數(shù)
>>> func(-9) # 調(diào)用變量 = 調(diào)用函數(shù)
9
- 函數(shù)名 && 變量
>>> abs = 9 # 函數(shù)名可以作為變量使用
>>> abs(-9) # 函數(shù)名作為變量時,相當于重新賦值,失去之前的函數(shù)功能
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
- 高階函數(shù) —— 一個函數(shù)接受另一個函數(shù)作為參數(shù)
>>> def sum(x,y,f):return f(x) + f(y)
調(diào)用高階函數(shù)
>>> sum(3,-9,abs) # 12
映射
- map()
- 接收參數(shù) :函數(shù)、Iterable
- 計算過程 :將傳入函數(shù)依次作用于Iterable中的每個元素
- 返回結(jié)果 :Iterator(惰性序列)
>>> def f(x):return x * x
>>> map(f,[0,1,2,3,4,5]) # 相當于[f(0),f(1),f(2),f(3),f(4),f(5)]
- 其效果為:
map(f,[0,1,2,3,4,5]) = [f(0),f(1),f(2),f(3),f(4),f(5)]
map(f,[0,1,2,3,4,5])函數(shù)對應(yīng)的示意圖:
>>> f = [0,2,4,6]
>>> f.map(w => w + 1)
[1,3,5,7]
- reduce()
- 接收參數(shù) :函數(shù)、Iterable
- 計算過程 :函數(shù)作用在序列上,將結(jié)果與序列的下一個元素進行累計計算
- 返回結(jié)果 :累積計算結(jié)果
>>> def f(x,y):return x * 10 + y
>>> reduce(f,[0,1,2,3,4,5]) # 相當于f(f(f(f(f(0,1),2),3),4),5)
- 其效果為:
reduce(f,[0,1,2,3,4,5]) = f(f(f(f(f(0,1),2),3),4),5)
reduce(f,[0,1,2,3,4,5])函數(shù)對應(yīng)的示意圖:
累加:
>>> f = [1,2,3,4,5,6,7,8,9]
>>> f.reduce(x, y => x + y)
45
- map() && reduce()
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from functools import reducedef fn(x, y):return x * 10 + ydef char2num(s):DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}return DIGITS[s]print(reduce(fn, map(char2num, '13579'))) #13579
過濾算法
filter()
- 接收參數(shù) :函數(shù)、序列
- 計算過程 :將傳入函數(shù)依次作用于序列中的每個元素
- 返回結(jié)果 :Iterator,僅返回序列中符合條件的元素
利用filter求素數(shù)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-def main():for n in primes():if n < 1000:print(n)else:break# 構(gòu)造從3開始的奇數(shù)序列[生成器,無限序列]
def _odd_iter(): n = 1while True:n = n + 2yield n# 定義篩選函數(shù)
def _not_divisible(n): return lambda x: x % n > 0# 定義生成器,不斷返回下一個素數(shù)
def primes():yield 2it = _odd_iter()while True:n = next(it)yield nit = filter(_not_divisible(n), it)if __name__ == '__main__':main()
排序算法
sorted()
- 可對list進行排序
- 數(shù)字排序 :默認從小到大
- 字符串排序 :默認按照ASCII大小比較,‘Z’<‘a(chǎn)’。先大寫后小寫
>>> sorted([20,14,-22,4,9]) # 默認從小到大
[-22, 4, 9, 14, 20]
>>> sorted([20,14,-22,4,9],key=abs) # key處理后再排序
[4, 9, 14, 20, -22]>>> sorted(['Bob','Jimmy','grace','amey','Zoo']) # 默認ASCII碼從小到大排序
['Bob', 'Jimmy', 'Zoo', 'amey', 'grace']
>>> sorted(['Bob','Jimmy','grace','amey','Zoo'],key=str.lower) # 忽略大小寫排序
['amey', 'Bob', 'grace', 'Jimmy', 'Zoo']
>>> sorted(['Bob','Jimmy','grace','amey','Zoo'],key=str.lower,reverse=True) # 反向排序
['Zoo', 'Jimmy', 'grace', 'Bob', 'amey']
總結(jié)
以上是生活随笔為你收集整理的【廖雪峰Python学习笔记】高阶函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【廖雪峰Python学习笔记】list
- 下一篇: 【廖雪峰Python学习笔记】函数式编程