一、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))) # 使用列表打印一下
- 首先,for i in yield_test(5)执行一步,yiled_test()函数运行到call(i),返回给for循环的值是0*2,取值结束,程序执行到print(i,","), 输出: 0,
- 程序从yield call(i)的下一条语句开始执行,print(“i=”,i), 输出: i=0
- 继续执行,yiled_test()函数运行到call(i),给for循环的值是1*2,程序执行到print(i,","), 输出: 2,
- 程序从yield call(i)的下一条语句开始执行,print(“i=”,i) 输出: i=1
- …
结果:
参考至: