日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【廖雪峰Python学习笔记】高阶函数

發(fā)布時間:2023/11/27 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【廖雪峰Python学习笔记】高阶函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Higher-order function

  • 高階函數(shù)
    • 映射
    • 過濾算法
    • 排序算法

高階函數(shù)

  1. 變量可指向函數(shù)
>>> abs			# 函數(shù)
<built-in function abs>
>>> abs(-0)		# 函數(shù)調(diào)用
0
>>> func = abs	# 變量可指向函數(shù)
>>> func(-9)	# 調(diào)用變量 = 調(diào)用函數(shù)
9
  1. 函數(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
  1. 高階函數(shù) —— 一個函數(shù)接受另一個函數(shù)作為參數(shù)
>>> def sum(x,y,f):return f(x) + f(y)

調(diào)用高階函數(shù)

>>> sum(3,-9,abs)		# 12

映射

  1. 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)的示意圖:

f0 = 0 * 0f1 = 1 * 1f2 = 2 * 2f3 = 3 * 3f4 = 4 * 4f4 = 5 * 501491625fx = x * x012345
>>> f = [0,2,4,6]
>>> f.map(w => w + 1)
[1,3,5,7]
  1. 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)的示意圖:

fx,y = x * 10 + y012345112123123412345

累加:

>>> f = [1,2,3,4,5,6,7,8,9]
>>> f.reduce(x, y => x + y)
45
  1. 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:【廖雪峰Python学习笔记】高阶函数