目錄
(六)函式----(五)
6.1迭代器
6.2可迭代協議,迭代器協議
6.3迭代器的好處
#迭代器含有兩個__iter__()和__next__()函式方法(就是迭代器協議)
#dir() 列印所有擁有的方法
print('__iter__' in dir( .__iter__()))
print('__next__' in dir( .__iter__()))
首先我們要知道可以被for迴圈的有哪些?
只有 是可迭代物件的時候 才能用for
當我們遇到乙個新的變數,不確定能不能for迴圈的時候,就判斷它是否可迭代
str,list,tuple,dic,set,f = open(),range(),enumerate
#可以使用for迴圈的有str,list,tuple,dic,set,f = open(),range(),enumerate
l = [1,2,3,4]
for i in l:
print(i)
思考:int,bool可以嗎?為什麼有的可以迴圈,有的不可以迴圈
補充:dir()函式不帶引數時,返回當前範圍內的變數、方法和定義的型別列表;
帶引數時,返回引數的屬性、方法列表。
print(dir()) #返回列表擁有的所有方法
ret = set(dir())&set(dir({}))&set(dir(''))&set(dir(range(10)))
print(ret) #iterable
#都含有__iter__
# print('__iter__' in dir(list))
# print('__iter__' in dir(dict))
# print('__iter__' in dir(set))
# print('__iter__' in dir(tuple))
# print('__iter__' in dir(enumerate()))
# print('__iter__' in dir(range(1)))
只要是能被for迴圈的資料型別 就一定擁有__iter__方法
print(.__iter__()) 乙個列表執行了__iter__()之後的返回值就是乙個迭代器
迭代器含有兩個__iter__()和__next__()函式方法
print(dir()) #列表含有的所有方法
print(dir(.__iter__())) #是乙個迭代器
print(set(dir(.__iter__())) - set(dir()))
#__length_hint__() #元素個數
print([1,'a','bbb'].__iter__().__length_hint__())
#3 3個元素
__next__() #從迭代器中乙個乙個取值
l = [1,2,3]
iterator = l.__iter__()
print(iterator.__next__())
print(iterator.__next__())
print(iterator.__next__())
'''123
'''
可迭代的:含有__iter__就是可迭代的
可迭代協議:內部含有__iter__方法
迭代器含有兩個__iter__()和__next__()函式方法(就是迭代器協議)
print('__iter__' in dir( .__iter__()))
print('__next__' in dir( .__iter__()))
#自定義乙個迭代器
from collections.abc import iterable
from collections.abc import iterator
class a:
def __iter__(self):pass
def __next__(self):pass
a = a()
print(isinstance(a,iterator)) #迭代器(判斷是不是迭代器)
print(isinstance(a,iterable)) #可迭代的
#true
#true
#沒有__next__()就不是迭代器,但是可迭代的
迭代器的好處: 從容器型別中乙個乙個的取值,會把所有的值都取到。
節省記憶體空間 迭代器並不會在記憶體中再占用一大塊記憶體
而是隨著迴圈 每次生成乙個 每次next每次給我乙個
print(range(100000000000000))
for i in range(2000000):
print(i)
#gg了
python基礎知識(六)函式 (八)
目錄 六 函式 八 6.1匿名函式的格式 6.2匿名函式和五個特殊的內建函式可以結合使用 6.3面試題練一練 lambda 引數,引數2 返回值表示式 def add x,y return x y add lambda x,y x y print add 1,4 匿名函式在內建函式 max 求最大值...
python 基礎知識六 內建函式(1)
coding utf 8 abs 函式 返回數字的絕對值。print abs 45 45 print abs 100.12 100.12 print abs 119l 119 特例 複數 返回 a 2 b 2 開根 print abs 1 2j 2.23606797749979 print abs ...
python中基礎知識(六)
列表 元組 共同點 都是通過索引引用元素值 不同點 列表是可讀寫的,元組是唯讀的 names bill mike john mary numbers 1234 4321 6789 6543 print numbers names.index mike print names numbers.inde...