python_列表生成式

#列表生成器
a=[ i*2 for i in range(10)]
print (a)#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

a1=[]
for i in range(10):
    a1.append(i*2)
print(a1) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
b=(i*2 for i  in range(10))
print (b)#generator object <genexpr> at 0x0000005E0F89A360>	

生成器 :只有在调用时才会生成相应的数据

通过上面的例子可以看出来 当用列表生成器时候后打印a,a的值实际上已经存在内存中,而当使用b的时候只是给出a的内存地址实际上还没有生成,调用b例子:

b=(i*2 for i  in range(10))
print (b)#generator object <genexpr> at 0x0000005E0F89A360>
for i in b:
    print(i)#0,2,4,6....
生成器next方法(调取下一个值) :

b=(i*2 for i  in range(10))
print (b)#generator object <genexpr> at 0x0000005E0F89A360>

print(b.__next__())
print(b.__next__())
简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator
def fib(x):
    n,a,b=0,0,1
    while n<x:
        print('我是真的',b)
        a,b=b,a+b
        n+=1
    return "越界"
fib(10)
#生成器
def fib1(x):
    n,a,b=0,0,1
    while n<x:
        yield b
        a,b=b,a+b
        n+=1
    return "越界"
print(fib1(10))#<generator object fib1 at 0x000000C200E1A518>
yi=fib1(10)
print("a",yi.__next__())
#接着next往下循环
for i in yi:
    print(i)

单线程:

def consumer(name):
    print("准备吃包子了%s"%name)
    while True:
        baozi=yield
        print("包子[%s],被[%s]吃了"%(baozi,name))

# b1="韭菜"
# c=consumer("w")
#
# c.__next__()
# #传值
# c.send(b1)
def producer(name):
    c=consumer(name)
    c.__next__()
    for i in range(10):
        print ("做了两个")
        c.send("%d个韭菜"%i+2)
producer("w")




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值