推導式字典推導式
集合推導式
內部函式包含對外部作用域而非全劇作用域名字的引用,該內部函式稱為閉包函式。
在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...