day13迭代器、生成器和装饰器

迭代器(iter)
  1. 迭代器是容器性数据类型

  2. 创建迭代器方法:a.将其他序列转换成迭代器 b.创建生成器

  3. 特点:打印的时候无法查看元素;无法获取元素的个数;

​ 获取元素的时候必须将元素从迭代器中取出,取出后元素会从迭代器中消失,并且无法再添加

迭代器获取元素

迭代器不管以什么样的方式获取到了元素,那么被获取到的元素就会从迭代器里消失

1.获取单个元素

next(迭代器) 获取迭代器里最前面的元素

list1 = [10, 20, 30, 40]
i1 = iter(list1)
print(next(i1))   # 10
print(next(i1))	  # 20

2.遍历

for 变量 in 迭代器:
	pass

注意:如果获取一个空的迭代器,将会报错(StopIteration)

list1 = [10, 20, 30, 40]
i1 = iter(list1)
for i in i1:
    print(i)  # 10 20 30 40
生成器(generator)

​ 1. 生成器是容器性数据类型,但是生成器存储的并不是数据,而是产生数据的算法

​ 2. 生成器就是迭代器

怎么创建生成器

​ 调用一个带有yield关键字的函数就可以得到一个生成器对象

注意:如果被调用的函数有yield,那么调用函数的时候不会执行函数体,也不会获取函数返回值,而是得到一个生成器

怎么控制生成器元素的个数和值

​ 执行创建生成器函数的函数体的时候,会遇到几次yield,那么对应的生成器就可以创建几个数据;
​ 每次遇到yield,yield后面的值就是创建的具体的数据

def func1():
    print('----1----')
    yield 100
    print('----2----')
    yield 200
    print('----3----')
    yield 300

result = func1()
print(next(result))
print(next(result))
装饰器

​ 装饰器是用来给已经定义好的函数添加功能

无参装饰器语法:

def 装饰器名称(原函数对应的形参):
    def 新函数名(*args, **kwargs):
        原函数返回值 = 原函数(*args, **kwargs)
        新增功能
        return 原函数返回值
    return 新函数名
def total_time(f):
    def new_f(*args, **kwargs):
        start = time.time()
        result = f(*args, **kwargs)
        end = time.time()
        print(f'执行时间:{end - start}')
        return result
    return new_f

@total_time  	 # 装饰器
def func1(a, b):
    sum1 = a + b
    print(sum1)
    
func1(10, 20)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值