Python基础之迭代器、生成器、装饰器

发布时间:2026/7/27 18:22:49
Python基础之迭代器、生成器、装饰器 题1迭代器定义一个迭代器类RangeIterator接收两个参数start、end实现功能可以遍历[start, end) 之间所有 3 的倍数必须手动实现__iter__和__next__方法禁止用生成器。classRangeIterator:def__init__(self,start,end):self.startstart self.endend# 先找到第一个3的倍数在[start,end]中# start: 1 current 3# start: 2 current 3# start: 3 current 3# start: 1 current 3# start: 2 current 3# start: 3 current 3self.currentstartifstart%30else3start-start%3def__iter__(self):returnselfdef__next__(self):ifself.currentself.end:raiseStopIteration valueself.current self.current3returnvalue rRangeIterator(1,10)foriinr:print(i)题2生成器编写一个生成器函数fib_generator(n)生成前 n 项斐波那契数列。规则第 1、2 项为 1从第 3 项开始每一项 前两项之和使用yield实现不能一次性返回列表deffib_generator(n):a,b1,1for_inrange(1,n1):yielda a,bb,ab _ 1 yield 1 a:1 b:2 _ 2 yield 1 a:2 b:3 _ 3 yield 2 a:3 b:5 _ 4 yield 3 a:5 b:8 gfib_generator(10)foriing:print(i)题3装饰器编写一个装饰器timer可以装饰任意函数自动打印该函数的运行时间秒。要求装饰器不带参数能装饰有参 / 无参函数输出格式函数名 运行时间x.xx 秒提示函数对象.__name__可以获取函数名例如被装饰函数如下deftest_func():print(hello)defadd(start,end):sum0foriinrange(start,end1):sumireturnsumimporttimedeftimer(func):defwrapper(*args):starttime.perf_counter()resultfunc(*args)endtime.perf_counter()print(f{func.__name__}运行时间:{end-start}秒)returnresultreturnwrappertimerdeftest_func():print(hello)timerdefadd(start,end):sum0foriinrange(start,end1):sumireturnsumtest_func()print(add(1,100))