2020-11-16

一.高階函數(shù)

-->分類:

? ????? 1.將函數(shù)作為參數(shù)? ? 2.將函數(shù)作為返回值

-->好處:

? ? ????1.當使用函數(shù)作為參數(shù)的時候,實際是將函數(shù)代碼傳入到目標函數(shù),交互性好

-->不同的函數(shù)實現(xiàn)不同的功能,滿足不同用戶需求,簡單示例

求偶數(shù)

def fn1(n):

? ? if n % 2 == 0:

? ? ? ? return True

大于5

def fn2(n):

? ? if n > 5:

? ? ? ? return True

3的倍數(shù)

def fn3(n):

? ? if n % 3 == 0:

? ? ? ? return True

lst = [1,2,3,4,5,6,7,8,9]

def fn(fun,l):????#傳入函數(shù)參數(shù)

? ? lst1 = []

? ? for i in l:

? ? ? ? if fun(i) : ????#調(diào)用函數(shù)

? ? ? ? ? ? lst1.append(i)

? ? return lst1

print(fn(fn3,lst))? #[3, 6, 9]

二.匿名函數(shù)

格式:filter(function,interable)

function: 函數(shù)名

interable: 可迭代對象

返回值:對象

lst = [1,2,3,4,5,6,7,8,9,10]

def fn1(n):

? ? ?if n > 5:

? ? ? ? ?return True

print(filter(fn1,lst))

print(list(filter(fn1,lst)))

# <filter object at 0x0000024456291CF8>

# [6, 7, 8, 9, 10]

-->由于創(chuàng)建的函數(shù)內(nèi)容(實現(xiàn)功能簡單),引入匿名函數(shù)

????????1.占用空間小,

????????2.只會調(diào)用一次,就會在內(nèi)存中消失了

-->匿名函數(shù)lambda

????????格式: lambda 參數(shù)表達式;返回值

r =lambda a,b : a + b

print(r)????# at 0x000002037A2EC268>

print(r(100,200))????#300

三.閉包

-->高階函數(shù)第二種形式:將函數(shù)作為返回值

-->通過閉包創(chuàng)建一個只有當前函數(shù)才能返回的變量,我可以將一些私有數(shù)據(jù)放到閉包

形成閉包的條件:

? ? 1.函數(shù)嵌套? ??

????2.內(nèi)部函數(shù)使用了外部函數(shù)的變量(還包括外部函數(shù)的參數(shù))?

????3.外部函數(shù)返回了內(nèi)部函數(shù)

實例如下:

def num_add():

lst = []

????def fn(n):

????lst.append(n)

????return sum(lst) /len(lst)

return fn

r = num_add()

print(r(10))

print(r(20))

lst = [ ]???? 無影響,不改變運行結(jié)果

lst = 7? 無影響, 不改變運行結(jié)果

print(r(30))

# 10.0

# 15.0

# 20.0

四.裝飾器

-->我們可以直接修改函數(shù)代碼完成需求,但是會產(chǎn)生一些問題? ??

????????1.如果修改的函數(shù)較多,修改起來麻煩? ?

?????????2.不方便后期維護? ??

????????3.這種方式會違反OCP原則(擴展代碼,但不允許修改源碼)

-->例子:對f4函數(shù)擴展

def f4():

#? ? print('我是F4')

# def f5():

#? ? print('函數(shù)開始')

#? ? f4()

#? ? print('函數(shù)結(jié)束')

# f5()

# 函數(shù)開始

# 我是F4

# 函數(shù)結(jié)束

-->擴展案例

def add(a,b):

# 求任意兩個數(shù)的和

? ? # print('開始運行')

? ? r = a + b

# print('結(jié)束運行')

? ? return r

# v = add(109,108)

# print(v)

# 開始運行

# 結(jié)束運行

# 217

def new_add(a,b):

print('開始運行')

print('結(jié)束運行')

return add(a,b)

print(new_add(123,543))

# 開始運行

# 結(jié)束運行

# 666

-->裝飾器的使用

def add(a,b):

????r = a + b

return r

def f_start(old):????#傳入函數(shù)參數(shù),對其進行拓展

? ? def new_fun(*a,**b):????#接收多種參數(shù)

? ? ? ? print('開始執(zhí)行')

res = old(*a,**b)

print('結(jié)束執(zhí)行')

return res

return new_fun

r = f_start(add)

value = r(132,543)

print(value)

開始執(zhí)行

結(jié)束執(zhí)行

675?

-->類似于f_start(old)函數(shù)稱之為裝飾器函數(shù)

對傳入的old函數(shù)擴展

-->實際使用

@f_start

def say():

print('hello world')

say()

開始執(zhí)行

hello world

結(jié)束執(zhí)行

五.命名空間

--> locals() 獲取當前作用域的命名空間

a =10? #相當于在命名空間田間key-value ( 'a' = 10)

r =locals()

print(r)

print(r['a'])

# {'__name__': '__main__',

# '__doc__': None,

# '__package__': None,

# '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000211C6E31CF8>,

# '__spec__': None, '__annotations__': {}, '__builtins__': ,

# '__file__': 'C:/untitled/001.小黑/命名空間.py', '__cached__': None, 'r': {...}}

10

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市榕栏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阴孟,死亡現(xiàn)場離奇詭異够委,居然都是意外死亡,警方通過查閱死者的電腦和手機麦乞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阅爽,“玉大人路幸,你說我怎么就攤上這事「段蹋” “怎么了简肴?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長百侧。 經(jīng)常有香客問我砰识,道長,這世上最難降的妖魔是什么佣渴? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任辫狼,我火速辦了婚禮,結(jié)果婚禮上辛润,老公的妹妹穿的比我還像新娘膨处。我一直安慰自己,他們只是感情好砂竖,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布真椿。 她就那樣靜靜地躺著,像睡著了一般乎澄。 火紅的嫁衣襯著肌膚如雪突硝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天置济,我揣著相機與錄音解恰,去河邊找鬼。 笑死浙于,一個胖子當著我的面吹牛护盈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羞酗,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼腐宋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脏款,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎裤园,沒想到半個月后撤师,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡拧揽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年剃盾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淤袜。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡痒谴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铡羡,到底是詐尸還是另有隱情积蔚,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布烦周,位于F島的核電站尽爆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏读慎。R本人自食惡果不足惜漱贱,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夭委。 院中可真熱鬧幅狮,春花似錦、人聲如沸株灸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚂且。三九已至配猫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杏死,已是汗流浹背泵肄。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淑翼,地道東北人腐巢。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像玄括,于是被迫代替她去往敵國和親冯丙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 包(lib)、模塊(module) 在Python中胃惜,存在包和模塊兩個常見概念泞莉。 模塊:編寫Python代碼的py...
    清清子衿木子水心閱讀 3,801評論 0 27
  • 要點: 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍畲场傩浴?..
    victorsungo閱讀 1,468評論 0 6
  • 20200206 ##命名空間(namespace) 指的是變量存儲的位置鲫趁,每一個變量都需要存儲到指定的命名空間中...
    張騰_1fc4閱讀 196評論 0 0
  • 1. 選教程 看到crossin的編程教室python教程還不錯。以這個為主要學習內(nèi)容利虫。 python簡單實驗...
    青島大橋_Android到后端閱讀 563評論 0 0
  • 1.集合的使用 1.1集合的操作len()挨厚,返回集合的長度。s = set('python')#s為{'p','y...
    rivulet閱讀 195評論 0 0