初识函数--生成器

  1. 生成器本质就是迭代器,所以取值方式和迭代器一样,只不过迭代器是python自带的,生成器是自己写的
  2. 生成器的生成方式:a--通过生成器函数;b--推导式;c--python内置函数或模块(a,c本质一样,都是通过生成器函数,3是自带的,1是自己写)
  3. return和yield:
    • 都是返回值,都可以返回多个,只是return是一次性返回多个
    • return还会终止函数的执行,函数体内return后面的代码不执行
    • yield会记录当前的执行位置:一个yield对应一个next
  4. 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])})

猜你喜欢

转载自www.cnblogs.com/lingshuai/p/11938935.html