- 生成器本质就是迭代器,所以取值方式和迭代器一样,只不过迭代器是python自带的,生成器是自己写的
- 生成器的生成方式:a--通过生成器函数;b--推导式;c--python内置函数或模块(a,c本质一样,都是通过生成器函数,3是自带的,1是自己写)
- return和yield:
- 都是返回值,都可以返回多个,只是return是一次性返回多个
- return还会终止函数的执行,函数体内return后面的代码不执行
- yield会记录当前的执行位置:一个yield对应一个next
- yield和yield from的区别(例3.3 例3.4):
- yield:将可迭代对象一次性返回
- yield from:将可迭代对象一个一个地返回
例 3.1
def func():
print(1)
yield 2
func() # 函数的调用就是生成生成器,什么都不输出..如果只print(func())是生成器的内存地址
print(func().__next__()) # 因为生成器的本质就是迭代器,所以取值和迭代器是一样的
例 3.2
def func():
print(1)
yield 11
print(2)
yield 22
func()
print(func())
print(func().__next__())
print(func().__next__())
例 3.3
def func():
lst = [1,2]
lst1 = ['alex','wusir','taibai','baoyuan']
yield lst
yield from lst1
func()
print(func().__next__()) # [1,2]
print(func().__next__()) # 'alex'
print(func().__next__()) # 'wusir'
例 3.4
def func():
lst = [1,2]
lst1 = ['alex','wusir','taibai','baoyuan']
yield lst
yield from lst1
g = func()
for i in g:
print(i)
[1,2]
'alex'
'wusir'
'taibai'
'baoyuan'
求[{x:y}]其中x是0-5之间的偶数以元组的形式,
y是0-5之间的奇数元组形式组成字典
print({tuple([x for x in range(6) if x % 2 ==0]):
tuple([y for y in range(6) if y % 2 == 1])})