1、什麼是迭代器?
什麼是迭代?
迭代是乙個重複的過程,但每次重複都是基於上次重複的結果而繼續
什麼是迭代器?
迭代取值的工具
2、為什麼要用迭代器?
迭代器優點:
1.提供了一種不依賴於索引的迭代取值方式
2.更節省記憶體
缺點: 1.不能按照索引的取值方式靈活取值
2.取值是一次性的,只能往後取,無法**值的個數
3、如何用迭代器
可迭代的物件:str\list\tuple\dict\set\檔案物件
但凡內建有__iter__方法的物件都可以稱之為可迭代物件
迭代器對像:檔案物件
既內建有__iter__方法又內建有__next__方法的物件稱之為迭代器物件
呼叫可迭代物件__iter__方法,會有乙個返回值,改返回值就是內建的迭代器物件
d=iter_d=d.__iter__()
while true:
try:
v=iter_d.__next__()
print(v)
except stopiteration:
break
try execpt 檢測異常
可以直接用for迴圈:
for k in d:
print(k)
for迴圈的底層原理:
1.呼叫in後面那個值/物件的 __iter__方法,拿到乙個迭代器物件iter_obj
2.呼叫迭代器物件iter_obj.__next__()將得到的返回值賦值變數名k,迴圈往復直到取值完畢丟擲異常stopiteration
3.捕捉異常結束迴圈
以後用:
iter_d=iter(d)
print(next(iter_d))
二、生成器
生成器是一種自定義的迭代器
如何得到生成器?
但凡函式內出現yield關鍵字,再去呼叫函式不會立即執行函式體**,會得到乙個返回值,該返回值就是生成器物件,既自定義的迭代器
return只能返回一次值,yield可以返回多次值
def func():
print('first')
yield 1
print('second')
yield 2
print('third')
yield 3
g=func()
res1=next(g)
print(res1)
res2=next(g)
print(res2)
res3=next(g)
print(res3)
nex(g)
總結yield
1.提供一種自定義迭代器的解決方案
2.yield&return
相同點:都可以返回值,返回值沒有型別限制\個數限制
不同點:return只能返回一次值,yield卻可以讓函式暫停在某乙個位置,可以返回多次值
自己寫乙個可以造無窮個值的range功能
def my_range(start,stop,step):
while true:
if start三、函式遞迴呼叫與二分法
1.函式的遞迴呼叫
在呼叫乙個函式的過程又直接或者間接地呼叫了該函式的本身,稱之為遞迴函式
遞迴函式滿足兩個條件:
1.沒進入下一次遞迴呼叫,問題的規模都應該有所減少
2.遞迴必須有乙個明確的結束條件
遞迴有兩個明確的階段:
1.回溯
2.遞推
def age(n):
if n == 1:
return 18
else:
return age(n-1)+2
print(age(5))
l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
def func(list1):
for item in list1:
if type(item) is not list:
print(item)
else:
func(item)
func(l)
2.二分法
nums=[3,5,7,11,13,23,24,76,103,111,201,202,250,303,341]
def binary_search(list1,find_num):
print(list1)
if len(list1) == 0:
print('not exist')
return #結束迴圈用break,結束函式要用return
mid_index = len(list1)//2
if find_num >list1[mid_index]:
binary_search(list1[mid_index+1:],find_num)
elif find_num < list1[mid_index]:
binary_search(list1[:mid_index], find_num)
else:
print('find it')
binary_search(nums,205)
二分法是演算法的一種,用來解決查詢的問題
演算法:如何高效解決問題的方法
演算法都是用解決固定的問題
迭代器 生成器與遞迴呼叫
1.迭代器 迭代器是迴圈取值的工具。2.迭代器的有點與作用 1.迭代器提供一種不依賴索引的取值方式。2.迭代器能夠節省記憶體。3.迭代器的使用 1.可迭代物件 但凡內建有 iter 方法的物件,都稱之為可迭代物件。如 字串 字典 元組 列表 集合 檔案 2.迭代器物件 但凡內建有 ister 和 n...
生成器 迭代器 遞迴
27 生成器 1 def f1 print 123 yield 1 yield 2 yield 3 ret f1 ret.next 進入函式找到yield 獲取yield 後面的資料。1231 ret.next 進入函式找到yield 獲取yield 後面的資料。2 ret.next 進入函式找到y...
函式 生成器 迭代器
1.函式 1 函式的好處就是能將固定功能的模組封裝起來,在需要多次實現這個功能的時候就呼叫函式避免 的重複書寫,過於冗長 2 傳參 依次往後放這是規定 num,args,a 2,kwargs 中間兩個交換位置不影響 位置引數 引數關鍵字引數 引數 3 返回值函式執行沒遇到return返回值一定為no...