python的lambda函数和generator生成器的用法

一、lambda函数的用法
eg:

function_name = lambda x,y,z:x+y+z
# 函数名 = lambda 参数:函数体

print(function_name(1,2,3))

二、generator生成器

1、生成器的定义:一边循环一边计算的机制,称为生成器。

2、生成器的优势:在需要庞大的数据的同时,占有的内存小。

3、如何创建生成器:

  • 把一个列表的[]改为(),就创建了一个generator
  • print(i for i in range(5)),print(list((i for i in range(5)))),print([i for i in range(5)])
  • 如果某函数内部有关键词yield,则该函数为一个生成器,调用该函数则为创建一个generator对象

4、generator工作原理

  • 生成器可以迭代的关键是有一个next()方法,就是通过不断的调用next()方法,知道产生异常为止。
  • 生成器对象可以调用next()来取值,但是大部分都是使用for循环迭代取值,for i in generator object
  • yield相当于return,但是下次迭代时,代码从yield的下一条语句开始执行。
  • send()和next()一样,都能让生成器走下一步直到遇到yield,但是send()可以传入一个值,作为yield表达式整体的结果。
def test():
    i = 0
    while i<5:
        temp = yield i   # 第一次到达yield i则停下,第二次直接从下一条语句开始执行,所以temp的赋值没有执行
        print(temp)
        i = i + 1

a = test()
print(a.__next__())
print(a.__next__())
print(a.__next__())
# 使用send()函数将yield i整个表达式变成了'hello'值赋值给temp
print(a.send("hello"))

5、使用实例

def yield_test(n):
    for i in range(n):
        yield call(i)
        print("i=",i)
    print("Done.")

def call(i):
    return i*2

# 使用for循环取值,取出来的值都是yiled call(i)该语句返回的call(i)值
for i in yield_test(5):
    print(i,",")

print(list(yiled_test(5)))  # 使用列表打印一下
  1. 首先,for i in yield_test(5)执行一步,yiled_test()函数运行到call(i),返回给for循环的值是0*2,取值结束,程序执行到print(i,","), 输出: 0,
  2. 程序从yield call(i)的下一条语句开始执行,print(“i=”,i), 输出: i=0
  3. 继续执行,yiled_test()函数运行到call(i),给for循环的值是1*2,程序执行到print(i,","), 输出: 2,
  4. 程序从yield call(i)的下一条语句开始执行,print(“i=”,i) 输出: i=1

结果:在这里插入图片描述
参考至:

链接: https://www.cnblogs.com/liangmingshen/p/9706181.html.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值