day11 高階函式和裝飾器

2021-10-25 02:20:26 字數 1591 閱讀 6775

什麼是實參高階函式

引數是函式的函式就是實參高階函式

系統實參高階函式的應用

max/min,sorted,map,reduce

1)max、min

a.普通用法:max(序列) - 求序列中元素的最大值(序列中元素的型別必須一致,而且元素本身必須支援比較運算)

b.實參高階函式:max(序列, key=函式) - 通過函式來定製求最大值的方式

序列 - 需要獲取某種最大值對應的序列

函式 - 有且只有乙個引數(指向/代表序列中每乙個元素);有乙個返回值(求最大值的時候的比較物件)

2)sorted

用法一:sorted(序列) - 將序列中的元素按照元素的大小從小到大排序

用法二:sorted(序列, key=函式)

函式 - 有且只有乙個引數(指向/代表序列中每乙個元素);有乙個返回值(比較返回值的大小進行排序;返回值就是排序標準)

3)map

用法一:map(函式, 序列) - 通過原序列中的元素進行指定的變換後產生乙個新的序列

函式 - 有且只有乙個引數(指向/代表後面的序列中的元素);有乙個返回值(新序列中的元素)

用法二:map(函式, 序列1, 序列2) - 產生乙個新的序列,新序列中的元素是序列1和序列2中元素通過指定的變換產生的

函式 - 有且只有兩個引數(分別指向/代表序列1中的元素和序列2中的元素);有乙個返回值(新序列中的元素)

4)reduce(使用之前需要匯入functools模組)

用法一:reduce(函式, 序列) - 將序列中的元素通過制定的規則合併成乙個資料

函式 - 有且只有兩個引數(第乙個引數第一次呼叫的時候指向序列中的第乙個元素,從第二次開始都是指向上一次運算的結果;第二個引數指向除了第乙個元素以外的所有元素);返回值是每一次合併的結果(用來定製合併規則的)

用法二:reduce(函式, 序列, 初始值)

函式 - 第乙個引數第一次指向初始值,從第二次開始引數指向上次合併的結果;第二個引數指向序列中的所有元素;返回值是每一次合併的結果(用來定製合併規則的)

什麼是裝飾器

裝飾器是一種專門用來給其他的函式新增功能的函式

給函式新增新的功能

方式一:直接在需要新增功能的函式中新增新功能對應的**(缺點:同樣的功能的**可能需要寫很多遍)

方式二:定義乙個實參高階函式來給指定函式新增功能(缺點:主次顛倒)

方式三:裝飾器

無參裝飾器的寫法

裝飾器 = 實參高階函式+返回值高階函式+糖語法

套路:def 函式名1(引數1):

def 函式名2(*args, **kwarg):

result = 引數1(*args, **kwarg)

實現新增功能的**段

return result

return 函式名2

說明:函式名1 - 裝飾器的名字(按照當前裝飾器新增的功能來命名)

引數1 - 這個引數是用來接收被新增功能的函式(指向原函式),一般直接命名成:func

函式名2 - 表示的是在原函式的基礎上新增完功能的新函式,一般直接命名成乙個固定的名字:test、new_func

使用裝飾器:在需要新增功能的函式的定義前加:@裝飾器名

day11 高階函式和裝飾器

引數是函式的函式就是實參高階函式 def func4 f f func1 print f 10,20 2 print func1 10,20 2 def func1 nums return 1,2 func4 func1 系統實參高階函式的應用 普通用法 max min 序列 求序列中元素的最大 小...

day11 函式高階

根據變數作用域 能使用的範圍 的不同將變數分為 全域性變數和區域性變數 1.全域性變數 沒有定義在函式裡面或者類裡面的變數都是全域性變數 全域性變數的作用域是從定義開始到程式結束 全域性變數可以在函式裡直接用 2.區域性變數 定義在函式裡面的變數就是區域性變數。區域性變數的作用域是從定義開始到函式結...

day11 閉包函式和裝飾器

目錄 閉包函式 裝飾器什麼是閉包函式?閉,封閉,把乙個函式封閉在另乙個函式裡面起來,就是定義在函式內部的函式 包,將它整體打包,同時引用外部函式作用域的名字,方便接下裡使用 x 56 defouter y 78 definner print x,y return inner 只要是呼叫了外部函式y的...