# Iterator and Generator ## Iterator迭代器 - 迭代:從某個地方(string,list...等)一個一個取出元素的過程 - Iterator的用法:物件-> iter()-> iterator(可以用next()呼叫) - for loop 就是一種將物件變成iterator的過程 -- 範例 ```python= String = "Hello" iString = iter(String) print(next(iString)) print(next(iString)) print(next(iString))#若超過範圍(Ex.輸出第六次),會出現“StopIteration"錯誤 #H #e #l ``` - 應用 自己製作含有funtion的for迴圈 ```python3= def myfor(i,fx): iterator = iter(i) #設一個變數給iter完的參數 while True:#在遇到終止條件之前可以不斷重複 try: a = next(iterator)#用next一次呼叫一個數值來iterate except StopIteration:#全部interate完成即停止 break else:#如果沒有遇到except,執行完try之後就執行else的指令 fx(int(a)) def triple(x):#設計一個可以產生三次方的函數 print(x**3) myfor("13453", triple)#放入iterable的數值與函式,注意int等數字不可以迭代! ``` ## Generator 產生器 - 是一種iterator(一樣可以支援for loop與呼叫next) - 由generator function產出 - function vs generator function -- Function 用return回傳值,只能回傳一次 -- Generator function 用yield回傳generator,可以yield很多次 範例 ```python= def count_up_to(max): count = 1 while count <=max: yield count #generator function的特徵 count +=1 #因為yeild出的是generator,無法直接輸出值,但可以跑for loop或呼叫next C = count_up_to(21) #用C來儲存這個generator print(next(C)) print(next(C))#第二次呼叫的時候會記住上次的狀態,從停止的地方執行 #1 #2 ``` 製作'yes/no' generator ```python= def yn(): ans = "yes" while True: yield ans ans = "no" if ans == "yes" else "yes" yn_gen = yn() #一定要有這個指定參數給Generator的步驟 print(next(yn_gen))#next()內放的是參數 print(next(yn_gen)) print(next(yn_gen)) #yes #no #yes ``` - Generator Expression -- 類似list comprehension用[],Generator Expression用() 完整寫法 ```python= def nums(): for num in range(1,10)#generator可以支援for loop yield num #會產生1-10的generator new_gen = nums() ``` Generator expression ```python3= new_gen = (num for num in range(1,10)) ``` Generator expression 也可以帶入sum ```python= Ans = sum(num for num in range(1,10))#寫在sum()內部用特別多加括號 print(Ans)#從1加到9 #45 ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up