python的閉包函式,推導式

2021-09-07 20:41:58 字數 3840 閱讀 8165

推導式字典推導式

集合推導式

內部函式包含對外部作用域而非全劇作用域名字的引用,該內部函式稱為閉包函式。

在python中建立乙個閉包可以歸結為以下三點:

 閉包函式必須有內嵌函式

 內嵌函式需要引用該巢狀函式上一級namespace中的變數

 閉包函式必須返回內嵌函式

def outter(name):

def inner():

print("hello", name)

return inner

f = outter('李嘉豪')

f()

判斷閉包函式的方法__closure__

輸出的__closure__是乙個cell物件表示是閉包函式

輸出的是none 表示不是閉包函式。

def outter(name):

def inner():

print("hello")

print(inner.__closure__)

return inner

outter('李') # none

推導式comprehensions(又稱解析式),是python的一種獨有特性。推導式是可以從乙個資料序列構建另乙個新的資料序列。

推導式包括:

1. 列表(list)推導式

2. 字典(dict)推導式

3. 集合(set)推導式

列表推導式(list comprehension)是利用其它列表建立新列表的一種方式,

工作原理類似for迴圈,即可對得到的元素進行轉換或者篩選。

列表推導式的基本格式:

變數名=[表示式 for 變數 in 列表] 或者

變數名= [表示式 for 變數 in 列表 if 條件]

普通方法

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

new_lst =

for i in lst:

print(new_lst)

列表推導式

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

new_lst = [i ** 2 for i in lst]

print(new_lst) # [81, 64, 49, 36, 25, 16, 9, 4, 1]

普通方法

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

new_lst =

for i in lst:

if i % 2 == 1:

print(new_lst) # [9, 7, 5, 3, 1]

列表推導式

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

new_lst = [i for i in lst if i % 2 == 1]

print(new_lst) # [9, 7, 5, 3, 1]

普通方法

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

new_lst =

for i in lst:

if i > 2:

if i % 2 == 0:

print(new_lst) # [64, 36, 16]

列表推導式

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

new_lst = [i ** 2 for i in lst if i > 2 if i % 2 == 0]

print(new_lst) # [64, 36, 16]

普通方法

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

new_lst =

for i in lst:

for k in i:

print(new_lst) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

列表推導式

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

new_lst = [k for i in lst for k in i]

print(new_lst) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

1-1、用普通方法取出1,4,7

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

new_lst =

for i in range(len(lst)):

print(new_lst) # [1, 4, 7]

1-2、用列表推導式取出1,4,7

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

lst6 = [i[0] for i in lst]

print(lst6)

或者

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

new_lst = [lst[i][0] for i in range(len(lst))]

print(new_lst) # [1, 4, 7]

2-1、用普通方法取出1,5,9

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

new_lst =

for i in range(len(lst)):

print(new_lst) # [1, 5, 9]

2-2、用列表推導式取出1,5,9

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

new_lst = [lst[i][i] for i in range(len(lst))]

print(new_lst) # [1, 5, 9]

字典推導式是該思想的延續,語法差不多,只不過產生的是字典而已。

字典推導式格式:

變數名=

new_dic = {}

for key, value in dic.items():

new_dic[value] = key

print(new_dic) # 字典推導式

dic = 

new_dic =

print(new_dic) #

dic = 

print(dic) #

集合推導式跟列表推導式非常相似,唯一區別在於用{}代替

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

set =

print(set) #

Python函式式程式設計之閉包

def div fun n def div check fun x return x n 0 return div check fun這是什麼?外層函式中巢狀了乙個函式,然後外層函式將內層函式作為返回值進行返回,同時,返回函式中的計算也擁有了外層函式的變數n,這種將外部函式的引數和自身的區域性變數儲...

函式閉包python中的閉包

本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正 單簡說,閉包就是根據不同的置配息信到得不同的結果 再來看看專業的解釋 閉包 closure 是詞法閉包 lexical closure 的簡稱,是引用了由自變數的函式。這個被引用的由自變數將和這個函式一起存在,即使已離開了造創它...

函式式程式設計 閉包

def curve pie a 25 defcurve x return a pow x,2 return curve f curve pie print f 2 輸出結果 ans 100 檢驗函式是否閉包 print f.closure 環境變數 a 25 print f.closure 0 ce...