目錄三元表示式與列表推導式
字典生成式
zip()方法
生成器總結
迭代的物件
凡有_iter_方法的物件,都是可迭代物件
可迭代物件:python內建str,list.,tuple,dict,set,file
可迭代物件執行__iter__方法得到返回值,並且可迭代物件會有乙個__next__方法。
s='hello'
iter_s = s._iter_()
while true:
try:
print(iter_s__next__())
except stoplteration:
break
hel
lo
迭代器物件:執行可迭代物件__iter__方法,拿到返回值就是迭代器物件。
特點:1,內建__next__方法,執行該方法會拿到迭代器物件中的乙個值
2,內建__iter__方法,執行該方法會拿到迭代器本身
3,檔案本身就是迭代器本iey身
缺點:1,取指麻煩只能乙個乙個取,值取了就沒了
2,無法使用len()方法獲取長度
for迴圈原理
for迴圈稱為迭代器迴圈,in後必須是可迭代物件
因為迭代器使用__iter__
後還是迭代器本身,因此for迴圈不用考慮in後的物件是可迭代物件還是迭代器物件。
由於對可迭代物件使用__iter__
方法後變成乙個迭代器物件,這個迭代器物件只是占用了一小塊記憶體空間,他只有使用__next__
後才會吐出乙個乙個值。如lis = [1,2,3,4,5,...]
相當於乙個乙個雞蛋,而lis = [1,2,3,4,5,...].__iter__
相當於乙隻老母雞,如果你需要蛋,只需要__next__
即可。
條件成立的返回值if條件else不成立時的返回值
x = 10
y = 20
print(f'x if x>y else y:')
x if x>y else y:20
列表推導式[expression for item1 in iterable1 if condition1
for item2 in iterable2 if condition2
...for itemn in iterablen if conditionn
]類似於
res=
for item1 in iterable1:
if condition1:
for item2 in iterable2:
if condition2
...for itemn in iterablen:
if conditionn:
print(f"[i for i in range(10)]: ")
[i for i in range(10)]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(f"[i**2 for i in range(10)]: ")
[i**2 for i in range(10)]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print()
keys = ['name', 'age', 'gender']
values = ['nick', 19, 'male']
res = zip(keys, values)
print(f"zip(keys,values): ")
info_dict =
print(f"info_dict: ")
zip(keys,values): info_dict:
yield的英文單詞意思是生產,在函式中但凡出現yield關鍵字,再呼叫函式,就不會繼續執行函式體**,而是會返回乙個值。
def func():
print(1)
yield
print(2)
g = func()
print(g)
yield:
提供一種自定義迭代器的方式
yield可以暫停住函式,並提供當前的返回值
yield和return:
相同點:兩者都是在函式內部使用,都可以返回值,並且返回值沒有型別和個數的限制
不同點:return只能返回一次之;yield可以返回多次值
# 列表推導式
with open('52.txt', 'r', encoding='utf8') as f:
nums = [len(line) for line in f]
print(max(nums))
# 生成器表示式
with open('52.txt','r',encoding='utf8') as f:
nums = (len(line) for line in f)
print(max(nums)) # valueerror: i/o operation on closed file.
迭代器與生成器
可迭代物件 可以直接作用於for迴圈的物件 統稱為可迭代物件 返回迭代器的物件 即iterable。一是集合資料型別,如list tuple dict set str等 二是generator,包括生成器和帶yield的generator function。容器 簡單來說 容器是一系列元素的集合 容...
生成器與迭代器
迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1,2,3,...
生成器與迭代器
通過列表推導式,可以直接建立乙個列表,但是收到記憶體限制,列表容量肯定是有限的而且,建立乙個包含100萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...