一 可迭代對象Iterable
A.定義
可作用於for循環的對象叫可迭代對象
B.包括
1.集合數據類型 序列,字典,集合
2.迭代器對象
C.訪問可迭代對象
1.集合數據類型使用各自的訪問方法
2.迭代器對象使用迭代器對象訪問的方法
D.注意
1.具有__iter()__方法的可迭代對象具有可使用iter()函數變為迭代器對象
2.數值型可迭代對象即序列、字典、集合對應的可迭代對象
二 迭代器對象Iterator
A.定義
可作用於next()函數並能不斷調用的對象叫迭代 器對象
B.包括
1.iter(具有__iter__方法的對象)的返回值
2.生成器
C.訪問迭代器
1.循環遍歷訪問
2.使用next()方法訪問
next(迭代器,標誌位)當連續調用時,依次返回迭代器的元素,並記錄當前位置(同指針),當超出時無標誌位時會報Stoplteration異常,有標誌位時返回標誌位。
D.注意
1.迭代器對象一定具有__next()__方法<才可以使用next函數>
2.迭代器指針只能前進,不能調整和後退。
3.迭代器對象可使用序列轉換函數轉換為序列,但只能轉換未被迭代的部分
4.序列的迭代單位由所屬對象中自定義迭代方式決定<__next__方法>
>序列迭代器(以元素為迭代單位)
>文件迭代器(以行為迭代單位),
三 生成器對象
A.定義
生成器對象是一個存儲算法並能記錄上次位置的對象<惰性對象>
B.包括
1.元組生成式
2.帶有yield關鍵字的函數
def fib():
i = 0
while True:
yield i(返回) 或 i = yield(接收)
i = i+1
......
return StopIteration報錯內容
C.方法
1.發送值方法
>obj.send(x) 發送x給生成器函數<有yield接收時,發送值才有效>
2.調用值方法
>next(obj)<因為生成器也是迭代器的一種所以可以使用next函數>
>obj.send(x)<使用send方法時,第一次取值x必須為None,之後無要求>
D.注意
1.在函數中每次遇到yield關鍵字,程序都會凍結,有兩種情況
>yield用於返回值(相當於return)
若yield後有參,則函數返回該參數
>yield用於接收值(相當於一個形參)
若yield無參,則yield將擁有即send函數發送的值。若使用next()調用則yield的值為None.
2.注意
>生成器<函數>運行結束時(正常結束/遇到return結束),會拋出StopIteration錯誤,return的返回值會自動作為錯誤說明。
四 可調用對象(callable)
A.定義
實例化前,實現了__call__ 方法的對象為可調用對象
B.包括
1.所有函數
>函數發生調用行為時返回的是函數的返回值
2.所有類
類發生調用行為時返回的是類的實例
3.實現__call__方法的實例
實例發生調用行為時返回的是__call__方法的返回值
C.其它
1.判斷對象是否為可調用對象 callable(obj)返回True/False
2.可調用對象的調用方式:
可使用一對括號()來實現調用 callable_obj()
callable_obj()等價於callable.__call__()
3.可調用對象和函數語法規則完全相同,包括基本概念、參數處理、返回值