1.迭代器
迭代器无法直接创建,只能将其他的序列转换成迭代器。理解为:**盛放可迭代对象的容器**
特点:打印迭代器无法查看里面的元素,也不支持len操作
如果要使用迭代器中的元素,必须将元素从迭代器中取走,而且取一个就少一个。每次只能取最前面的元素
1.获取单个元素:next(迭代器)
i1 = iter('hello')
print(next(iter(i1)))
print(next(iter(i1)))
print(next(iter(i1)))
print(next(iter(i1)))
print(next(iter(i1)))
执行结果如下:
h
e
l
l
o
优点:
- 可节省内存空间
- 按顺序取值,直到取完为止
## 2.遍历
```python
i2 = iter([1, 2, 3, 4, 5, 6])
for x in i2:
print(x)
```
2.生成器
容器,是一种可以创建多个数据的容器,生成器真正保存的不是数据,而是创建数据的方法
2.打印生成器是无法看到元素,也无法通过len统计个数 生成器只会在需要数据的时候去创建数据,而且数据生成一个就少一个
3.生成器获取元素的方式和迭代器一模一样
def func1():
print('========')
print('++++++++')
yield
print('11111111')
return 12138
result = func1()
print(result)
执行结果为:
<generator object func1 at 0x00000199C5C71F20>
1.怎么控制生成器产生的数据的个数和值
生成器能创建多少个数据就是看执行创建生成器函数的函数体的时候 会遇到几次yield,每次遇到yield的时候yield后面的值就是可以创 建出来的数据
def func2():
yield 100
yield 200
yield 300
g2 = func2()
for x in g2:
print(x)
# print(list(g2))
2.总结
迭代器和生成器是编程中的关键概念。迭代器通过逐个访问数据,优化内存占用,适用于大数据集处理。生成器是一种特殊函数,逐步生成数据,避免一次性加载,适用于流式数据和按需计算。它们共同提升了程序性能,改善了资源利用。
3.装饰器 – decorator
装饰器将一个函数包装,并修改它的行为。
Put simply, decorators wrap a function, modifying its behaviour.
def line(k,b):
def res(x):
return k * x + b
return res
outer = line(3,2)
# 运行到这里 理论上局部变量k = 3和b = 2会被清除
inner = outer(5)
# 但是在这里的时候还是被记住了
print(inner)
# 输出结果
# 17
在一个函数line中定义了另一个函数res,res这个函数运用了调用line函数时的临时变量,并且最后的返回值是res函数的返回值,这样就构成了一个闭包
2.语法糖
- 作用: 用于拓展原来函数功能的一种函数,可以在不用更改原函数的代码前提下给函数增加新的功能
- 关键语法糖符号 @
- 案例
如在很多时候都需要有登录信息,但是如果某一个模块已经写完了,为了不修改已完成的代码可以使用装饰器
def login(func):
print('需要登录信息')
def check(*args,**kwargs):
print('验证完成')
return func(*args,**kwargs)
return check
@login
def test(*args,**kwargs):
print('开始查询')
return '查询完毕'
print(test())
输出结果
# 不加装饰器输出结果如下:
开始查询
查询完毕
# 加上装饰器输出结果:
需要登录信息
验证完成
开始查询
查询完毕
评论区