一、閉包
1.寫法:在外層函式中宣告乙個變數,在記憶體函式使用或者返回這個變數。
這個結構叫閉包。
deffun1():
a=10
deffun2():
print(a)
return fun2
這種結構就叫做閉包
2.作用:
1).保護變數
2).使變數常駐記憶體
__closure__
:有東西,就是閉包;none就不是閉包
defouter():
a = 10 #
常駐記憶體
definner():
print(a) #
在內部使用的外面的變數
return inner #
返回了內部函式
ret =outer()
print(ret.__closure__) #
有東西, 就是閉包. none就不是閉包
列印結果:(,)
二、迭代器
迭代器:
1.iterable 可迭代的物件,裡面包含了__iter__(),可以使用for迴圈
包括str,list,tuple,dict,set,open(),range()
2.iterator:迭代器,裡面包含了__iter__()和__next__(),也可以使用for迴圈
3.dir() 檢視某資料型別中可以執行的方法
lst = [1,2,3,4]print(dir(lst))
4.從那麼多個方法裡面找'__iter__'太難了,用下面這個判斷有沒有這個方法
lst = [1,2,3,4]it =dir(lst)
print('__iter__' in it)
5.總結特點
1)節省記憶體
2)惰性機制:只有執行__next__()才執行
3)只能向前,不能反覆
6.用while實現for迴圈
lst = [1,2,3,4]it = lst.__iter__
()while 1:
try:
print(it.__next__
())
except
stopiteration:
print('
結束了'
)
break
for el in
lst:
(el)
else
:
print('
結束了')
lst = [1,2,3]
it =dir(lst)
print('
__next__'in
it)print(it)
from collections import iterable #可迭代的
from collections import iterator #
迭代器
lst = ["
周潤發","
麻花藤","
劉劉劉"
]
print(isinstance(lst, iterable)) #
instance 例項, 物件
print(isinstance(lst, iterator)) #
instance 例項, 物件
it = lst.__iter__
()
print(isinstance(it, iterable)) #
instance 例項, 物件
print(isinstance(it, iterator)) #
instance 例項, 物件
python基礎 迭代器,閉包
函式名是 乙個變 但它是 乙個特殊的變 與括號配合可以執行函式的變 1.函式名的記憶體位址 2.函式名可以賦值給其他變數 3.函式名可以當做容器類的元素 4.函式名可以當做函式的引數 5.函式名可以作為函式的返回值 什麼是閉包?閉包就是內層函式,對外層函式 非全域性 的變數的引用.叫閉包 我們可以使...
閉包與迭代器
1.python內建函式 def compare args return max args min args a,b compare 1,2,3,4,5,6 print max min format a,b 2.若定義的函式引數為可變型別的變數,若果呼叫改變了此變數,其他可以看到此位置的變數也跟隨改...
Lua初識之迭代器與閉包
一 迭代器與閉包 迭代器是一種支援指標型別的結構,它可以遍歷集合的每乙個元素 在lua中我們常常使用函式來描述迭代器,每次呼叫該函式就返回集 合的下乙個元素 寫乙個方法實現迭代 function list iter t local i 0 定義區域性變數 i local n table.getn t...