1.迭代器
比喻:迭代器就好像你拿着书签去书架上逐本找书,这个书签就是一个迭代器
迭代器是一个可以逐个访问容器元素的对象,它不仅可以访问这些元素,还能记住上次访问到的位置。迭代器实现两个方法:
__iter__():返回迭代器本身
__next__():返回下一个元素,并更新位置。如果没有更多的元素,它就会引发一个叫做StopIteration的异常
如何运作:迭代器就是从容器中取元素的工具,他会记住你已经取到哪一个元素了,并能继续从下一个元素继续取
class MyIterator:
def __init__(self,data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
result = self.data[self.index]
self.index += 1
return result
iterator = MyIterator([1,2,3])
for item in iterator:
print(item)
2.可迭代
比喻:想象一下你有个装满书的书架,这些书就像可迭代的对象
可迭代的对象就像一个容器或集合,里面有多个元素,你可以对这些元素进行遍历。在python中,列表(list),元组(tuple),字符串(str)都是可迭代对象,他们都实现了一个特殊的方法叫做__iter__():,这个方法返回一个迭代器
如何运作:你可以把迭代对象看做是一个存放元素的容器,比如一个列表,你告诉python我有一堆东西,你可以从里面取东西
my_list = [1,2,3]
for item in my_list:
print(item)
3.生成器
什么是生成器,生成器是一种特殊类型的迭代器,用于简化迭代过程。他们允许你逐步生成数据,而不是一次性地生成所有数据,从而节省内存
如何使用生成器,生成器使用yield关键字来生成值。每次调用生成器的__next__():方法(或者使用for循环时隐式调用)时,生成器会继续从上次yield的位置回复并生成下一个值。
def count_up_to(max):
count = 1
while count <= max:
yield count
count += 1
# 使用生成器
for num in count_up_to(5):
print(num)
定义生成器
count_up_to是一个生成器函数。
yield count表示每次迭代时生成当前count值,并暂停执行,等待下一次调用。
for num in count_up_to(5)
每次迭代,生成器都会从上一次的yield继续执行,直到遇到下一个yield
4.装饰器
什么是装饰器:在不改变函数的情况下,在外部给函数添加功能
import random
import time
datas = [random.randint(0, 1000) for i in range(10000)]
datas_copy = datas.copy()
def time_cost(f):
def clac():
start = time.time()
f()
print(f"函数{f.__name__}消耗{time.time() - start}")
return clac
@time_cost
def my_fun1():
datas.sort()
print(datas)
my_fun1()
@time_cost
def my_fun2():
datas.sort()
print(datas)
my_fun2()