可迭代物件
字面意思分析:可以重複的迭代的實實在在的東西。
list,dict(keys(),values(),items()),tuple,str,set,range, 檔案控制代碼(待定)
專業角度: 內部含有'__iter__'
方法的物件,就是可迭代物件。
內建函式:dir()
print(dir(str))
判斷乙個物件是否是可迭代物件:
print('iter' in dir(str))
優點:
直觀。操作方法較多。
缺點:
佔記憶體。
不能迭代取值(索引,字典的key)。
迭代器
字面意思:可以重複迭代的工具。
專業角度: 內部含有'__iter__'
並且含有"__next__"
方法的物件,就是迭代器
可迭代物件轉化成迭代器:
l1 = [1, 2, 3, 4, 5]
# 內建函式iter()
obj = iter(l1)
# 迭代器可以迭代取值。利用next()進行取值
l1 = [1, 2, 3, 4, 5]
# 內建函式iter()
obj = iter(l1)
# print(obj)
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
迭代器優點:
非常節省記憶體。
惰性機制。
迭代器缺點:
不直觀。
操作不靈活。
效率相對低。
特性:
l1 = [22, 33, 44, 55, 66, 77]
obj = iter(l1)
for i in range(3):
print(next(obj))
for i in range(2):
print(next(obj))
利用while迴圈,模擬for迴圈內部迴圈可迭代物件的機制。
先要將可迭代物件轉化成迭代器。
利用next對迭代器進行取值。
利用異常處理try一下防止報錯。
可迭代物件與迭代器的對比
可迭代物件:
是乙個私有的方法比較多,操作靈活(比如列表,字典的增刪改查,字串的常用操作方法等),比較直觀,但是占用記憶體,而且不能直接通過迴圈迭代取值的這麼乙個資料集。
應用:當你側重於對於資料可以靈活處理,並且記憶體空間足夠,將資料集設定為可迭代物件是明確的選擇。
迭代器:
是乙個非常節省記憶體,可以記錄取值位置,可以直接通過迴圈+next方法取值,但是不直觀,操作方法比較單一的資料集。
應用:當你的資料量過大,大到足以撐爆你的記憶體或者你以節省記憶體為首選因素時,將資料集設定為迭代器是乙個不錯的選擇。(可參考為什麼python把檔案控制代碼設定成迭代器)。
# return 結束函式,給函式的執行者返回值(多個值通過元組的形式返回)。
# yield 不結束函式,對應著給next返回值(多個值通過元組的形式返回)。
pass
# def eat_baozi():
# list1 =
# for i in range(1,2001):
# return list1
## print(eat_baozi())
def eat_baozi_gen():
for i in range(1,2001):
# print(11)
yield f'號包子'
'''# ret1 = eat_baozi_gen()
# ret2 = eat_baozi_gen()
# # print(ret1)
# # print(ret2)
# print(next(ret1))
# print(next(ret1))
# print(next(ret1))
# # print(next(ret2))
# print(next(ret2))
# print(next(ret2))
# print(next(ret))
# print(next(ret))
'''# ret = eat_baozi_gen()
## for i in range(200):
# print(next(ret))
## for i in range(200):
# print(next(ret))
# yield from
# def func():
# l1 = [1, 2, 3]
# yield l1
# ret = func()
# print(next(ret))
# print(next(ret))
# print(next(ret))
# def func():
# l1 = [1, 2, 3]
# yield from l1
## '''
# yield 1
# yield 2
# yield 3
# '''
# ret = func()
# print(next(ret))
# print(next(ret))
# print(next(ret))
# yield : 對應next給next返回值
# yield from 將乙個可迭代物件的每乙個元素返回給next
# yield from 節省**,提公升效率(代替了for迴圈)
# l1 = [1,2,3......100]
# l1 =
# for i in range(1,101):
# print(l1)
# 列表推導式
l1 = [i for i in range(1, 101)]
# print(l1)
# obj = (i for i in range(1, 11))
# # print(obj)
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
# # print(next(obj))
1. next(obj)
2. for 迴圈
for i in obj:
print(i)
3. 資料轉化
print(list(obj))
生成器表示式:生成器 節省記憶體。
字典推導式,集合推導式: 兩種模式: 迴圈模式,篩選模式
l1 = ['小潘', '懟懟哥','西門大官人', '小澤ml亞']
dic = {}
for index in range(len(l1)):
dic[index] = l1[index]
print(dic)
print()
1~100
print()
python之迭代器與生成器
迭代器是乙個可以記住遍歷的位置的物件.迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完,迭代器只能往前,不能退後。迭代器有兩個基本的方法 iter 和next 注意 1.迭代器只能往前取值,不會後退。2.用iter函式可以返回乙個可迭代物件的迭代器。如果乙個函式中包括yield關鍵字,那...
Python之迭代器與生成器
每一次對過程的重複稱為一次 迭代 而每一次迭代得到的結果會作為下一次迭代的初始值。例如 迴圈獲取容器中的元素。定義 具有 iter 函式的物件,可以返回迭代器物件。例如列表,元組 語法 建立 class 可迭代物件名稱 def iter self return 迭代器 使用 for 變數名 in 可...
Python之迭代器與生成器
容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in,not in關鍵字判斷元素是否包含在容器中。通常這類資料結構把所有的元素儲存在記憶體中 也有一些特例,並不是所有的元素都放在記憶體,比如迭代器和生成器物件 在python中,常見的容器物件有 從技術角度來說,當它可...