1. 程式人生 > >函數進階_叠代器

函數進階_叠代器

我們 是我 -- list open ret 直接 必須 range

#叠代器

l = [1,2,3]
#索引
# 循環 for
# for i in l:
# i
# print(i)

# 可叠代的
#list
#dic
#str
#tuple
#f = open()
#set
#range()
#enumorate

#叠代器 --------for循環原理
# dir方法

# print(dir([])) #告訴我列表擁有的方法
# 雙下方法---->__add__
# print([1].__add__([2]))
# print([1]+[2])

# print((1).__add__(2)) #1+2---->(1).__add__(2)

# print(dir(str))

# ret = set(dir([]))&set(dir({}))&set(dir(str))&set(dir(tuple))&set(dir(range(10)))
#只要是for循環的數據類型,就一定擁有__iter__方法
# print([].__iter__())
# print(ret)
# print(dir([].__iter__()))
# ret = set(dir([].__iter__()))-set(dir([]))
# print(ret)

# l = [1,2,3,4]
#
# iteror = l.__iter__()
#
# print(iteror.__next__())
# print(iteror.__next__())
# print(iteror.__next__())
# print(iteror.__next__())
# print(iteror.__next__())
# iterable 可叠代的, ---> __iter__#只要含有__iter__是可叠代的
#[].__iter__() 叠代器--->__next__ #只要含有__next__就可以一個一個的取值

#要含有__iter__方法都是可以可叠代的------>可叠代協議
#叠代器協議,必須含有以上兩個方法,才叫叠代器協議

# l = [1,2,3,4]
#
# for i in l.__iter__():
# print(i)

# 叠代器協議和可叠代協議
# 可叠代協議和叠代器協議
# 可以被for循環都是可以叠代的
# 可叠代的內部都有__iter__方法
#只要是叠代器,一定可叠代,可叠代不一定是叠代器

# for 循環其實就是在使用叠代器
# iterator
#可叠代對象
# 直接給你內存地址

# print([].__iter__())
# # print(range(0,10))
# # print()

# for
# 只有是可叠代對象的時候,才能用for循環
# 當我們遇到一個新的變量,不確定能不能for循環的時候,就判斷是否可叠代

# for i in l:
# pass
# iterator ----> 1.__iter__()
# iterator.__next__()
# 叠代器的好處:
# 從容器中可以一個一個的取出,會把所有的值都取到
# 他可以節省內存空間
#叠代器並不會在內存中占用一大塊內存
#而是隨著循環,每次生成一個
#每次next,每次給我一個

#range

# l = [1,2,3,4,5,6]
#
# iterator = l.__iter__()
# while True:
# ret = iterator.__next__()
# print(ret)

# print(range(100000))
# print(list(range(1000000)))

#生成一個200萬個哇哈哈
# def func():
# for i in range(20000000):
# "wahaha%s"%i

#生成器
# 生成器函數------------本質上是我們自己寫的函數
# 生成器表達式

函數進階_叠代器