Python基础知识14(# 生成器 generator)

# 生成器 generator

# 生成器指的是生成器对象, 可以由生成器表达式得到,或者由生成器函数得到

# 生成器对象, 是一个可迭代对象, 是一个迭代器

# 生成器对象是延迟计算, 惰性求值

# 1 由生成器表达式得到

# m = (i for i in range(5))

# print(m, type(m))   #<generator object <genexpr> at 0x00000000003762E0>

# print(next(m))

# print(next(m))

# print(next(m))

# print(next(m))

# print(next(m))

# 普通函数调用,函数会立即执行直到执行完毕

# 这里 需要调用 next 驱动生成器对象

# 或者使用 for 循环驱动

# 2 由生成器函数得到

    # 一个函数体中 只要包含 yield 语句, 它就是一个生成器函数。

    #调用后返回一个生成器对象

def foo():

   for i in range(5):

    yield i  # 碰见 yield 会暂停函数, 把后面的值返回

# print(foo())  # <generator object foo at 0x00000000001862E0>

# g = id(foo())

# print(g)

# g = foo()

f = foo()

# print(id(g), id(f))  # 垃圾回收机制  1,某个变量的引用计数为0的化,就可以进行垃圾回收(回收这个变量的内存),

                                #   2, 如果程序执行完毕,所有的变量,函数,类。。全部会被垃圾回收。

print(next(f))                      

print(next(f))                      

print(next(f))    


 

def foo2():

    print('$1')

    yield 1

    print('$2')

    yield 2

    print('$3')

    yield 3

    return 4

    yield 5

f2 = foo2()

print(next(f2))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值