Python 官方文档:入门教程 => 点击学习
目录生成器01 什么是生成器?02 通俗的讲解03 生成器到底有什么用?04 生成器的常见用途?匿名函数01 什么是匿名函数?02 通俗的讲解总结生成器 01 什么是生成器? 记住两
记住两个关键:
初学的你,还是太难理解?
你可以将生成器理解为一个盒子,你可以向这个盒子里随意添加元素,当你需要的时候,再取出来用。
请看下面的例子:
# 普通函数
def func():
return 1
f = func()
print("函数返回值:",f)
->函数返回值:1
print("函数返回值的类型:",type(f))
->函数返回值的类型:<class 'int'>
# 生成器
def gen\_func():
yield 1
yield 2
g = gen_func()
print("生成器对象:",g)
->生成器对象:object gen\_func at 0x00000189B8CFF7C8>
print("生成器对象的类型:",type(g))
->生成器对象的类型:<class 'generator'>
# 读取生成器对象的值,因为生成器也是一个迭代器,实现了python的迭代协议(即实现了\_\_iter\_\_方法)
for i in g:
print("生成器对象的值:",i)
->生成器对象的值: 1
->生成器对象的值: 2
作用:惰性求值(一边循环一边计算的机制),节省性能
举个例子:斐波那契数列(0,1,1,2,3,5…),打印斐波那契数列前50个元素
# 不使用生成器,会消耗大量内存
def fib(idx):
res=[]
n, a, b = 0, 0, 1
while n < idx:
res.append(b)
a, b = b, a+b
n += 1
return res
res = fib(100)
print(res)
# 使用生成器,可节约大量内存
def gen\_fib(idx):
n, a, b = 0, 0, 1
while n < idx:
yield b
a, b = b, a+b
n += 1
for i in gen_fib(100):
print(i)
当:
初学的你,还是太难理解?
你想实现一个求x的平方的函数,但是这个函数太简单,不值得专门def定义,同时,你忘记了平方的英文如何拼写,要是命名成 “pingfang”,又显得自己太low,于是乎,你可以不给这个函数起名字,还能实现它。这就是匿名函数lambda表达式。
比如:求一个数的平方
# 不用 lambda 表达式
def square(x):
return x * x
print(square(2))
# 使用 lambda 表达式
# 写法:lambda 返回值:计算表达式
s = lambda x: x * x
print(s(2))
1 如果你是初学者,可以先不掌握生成器和匿名函数,待学成Python后,再行琢磨;
2 在实际工作中,生成器和匿名函数的使用频次,相对较高,并且在面试中是高频问点。
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!
--结束END--
本文标题: python教程之生成器和匿名函数
本文链接: https://www.lsjlt.com/news/162480.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0