宣告:迭代器和生成器、裝飾器,兩者之間沒有直連關係。
迭代和遞迴的概念請參考:
雙下方法:雙下劃線的方法,如__name__();由c語言編寫的,不止一種呼叫方式;
iterable(可迭代):擁有__iter__()方法的資料型別 --> 可迭代協議
iterator(迭代器):擁有__iter__()方法和__next__()方法 --> 迭代器協議
能夠被for迴圈操作的資料型別都屬於可迭代型別(即__iter__()方法);
可迭代資料型別加入__iter__()方法則可以將乙個可迭代物件變成乙個迭代器。(這裡為什麼不是加入__next__()方法我到現在沒想明白)
(dir())
#dir():返回指定引數可使用的方法
print([1].__add__([2]))
print([1]+([2]))
#其實『+』 就是在呼叫__add__()方法,雙下方法一般不直接呼叫。
print('
__iter__
'in dir(123))
print('
__iter__
'in dir('
123'))#
判斷數字和字串中是否有可迭代方法
from collections import
iterable
from collections import
iterator
(isinstance(,iterator))
(isinstance(,iterable))
#簡單做乙個判斷,判斷迭代協議與可迭代協議的真實性
defgenerator():
print(1)
yield'a
'print(2)
yield'b
'yield'c
'g =generator()
for i in
g:
(i)ret = g.__next__
(ret)
ret = g.__next__
(ret)
ret = g.__next__
()print(ret)
注意:生成器每次只去一次值,沒取完的值也不會消失,在後續可以繼續呼叫
send使用
#生成器函式高階之send使用
deffunc1():
print('
line1')
line = yield 1
print(line,'
sendline')
print('
line2')
yield 2f =func1()
ret = f.__next__
(ret)
ret = f.send( '
one'
)print(ret)
列表推導式
#語法 [迴圈值 迴圈體 判斷(判斷語句可不寫)]
list = [i for i in range(30) if i%3 ==0]
print(list)
生成器表示式
#格式#(迴圈值 迴圈體)
list = (i for i in range(10))
for i in
list:
print(i)
字典推導式
#將乙個字典的key和value對調
mcase =
mcase_frequency =
print(mcase_frequency)
集合推導式
#集合推導式和列表推導式差不多,多乙個去重功能
squared =
print(squared)
Python生成器與迭代器
生成器只有在用的時候會出現在記憶體中,對比列表全部存在記憶體中,減少了記憶體占用 next 函式 依次取生成器的值 s x 2 for x in range 1000 中括號是列表解析,小括號表示生成一系列值,就是生成器 s at 0x7fa20aa8b048 print next s 用next ...
python 迭代器與生成器
迭代器和生成器 print 1 in 1,2,3 print 1 not in 1,2,3 print 4 in print 4 not in 1,2,3 print x not in dlkjfxfei 可迭代物件 iterable 可以被next 函式呼叫並不斷返回下乙個值 知道沒有資料時丟擲s...
Python 迭代器與生成器
一 迭代器 理解迭代器需要搞清楚容器 container 迭代器協議 可迭代物件 iterable 迭代器 iterator 生成器 generator 1 容器 container 容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in,not in關鍵字判斷元素是否...