迭代器(iter)
-
迭代器是容器性数据类型
-
创建迭代器方法:a.将其他序列转换成迭代器 b.创建生成器
-
特点:打印的时候无法查看元素;无法获取元素的个数;
获取元素的时候必须将元素从迭代器中取出,取出后元素会从迭代器中消失,并且无法再添加
迭代器获取元素
迭代器不管以什么样的方式获取到了元素,那么被获取到的元素就会从迭代器里消失
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)