python教程之生成器和匿名函数

 更新时间:2022年01月14日 09:48:12   作者:qq_43479892  
这篇文章主要为大家介绍了python生成器和匿名函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

生成器

01 什么是生成器?

记住两个关键:

  • **生成器是一种特殊的函数方法。**意味着它和函数(def)密不可分。
  • 基于上一点,只要函数中出现yield关键字,就是生成器函数

初学的你,还是太难理解?

02 通俗的讲解

你可以将生成器理解为一个盒子,你可以向这个盒子里随意添加元素,当你需要的时候,再取出来用。

请看下面的例子:

# 普通函数
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

03 生成器到底有什么用?

作用:惰性求值(一边循环一边计算的机制),节省性能

04 生成器的常见用途?

  • 读大文件
  • 网络爬虫 scrapy 框架
  • 协程

举个例子:斐波那契数列(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)

匿名函数

01 什么是匿名函数?

当:

  • 函数实现比较简单
  • 函数不需要被多个地方调用
  • 懒得给这个函数起名字时,我们可以使用匿名函数。

初学的你,还是太难理解?

02 通俗的讲解

你想实现一个求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 在实际工作中,生成器和匿名函数的使用频次,相对较高,并且在面试中是高频问点。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • Python中使用filter过滤列表的一个小技巧分享

    Python中使用filter过滤列表的一个小技巧分享

    这篇文章主要介绍了Python中使用filter过滤列表的一个小技巧分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Flask 使用类组织配置详情

    Flask 使用类组织配置详情

    这篇文章主要介绍了Flask使用类组织配置,在实际的项目中,我们一般都会建立三个环境:开发、测试和生产环境,这三种环境会使用不同的配置组合,为了能方便地切换配置,我们可以为不同的环境创建不同的配置文件,下面来看详细内容,需要的朋友可以参考一下
    2021-11-11
  • python eventlet绿化和patch原理

    python eventlet绿化和patch原理

    这篇文章主要介绍了python eventlet绿化和patch原理,帮助大家更好的理解和学习python eventlet工具的使用,感兴趣的朋友可以了解下
    2020-11-11
  • python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法

    python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法

    这篇文章主要介绍了python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法,需要的朋友可以参考下
    2020-02-02
  • 详解python中的time和datetime的常用方法

    详解python中的time和datetime的常用方法

    Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。这篇文章主要介绍了python之time和datetime的常用方法 ,需要的朋友可以参考下
    2019-07-07
  • Python实现中文文本关键词抽取的三种方法

    Python实现中文文本关键词抽取的三种方法

    文本关键词抽取,是对文本信息进行高度凝练的一种有效手段,通过3-5个词语准确概括文本的主题,帮助读者快速理解文本信息,本文分别采用TF-IDF方法、TextRank方法和Word2Vec词聚类方法,利用Python语言进行开发,实现文本关键词的抽取,需要的朋友可以参考下
    2024-01-01
  • Python中pandas库sort_values()方法的使用

    Python中pandas库sort_values()方法的使用

    最后去看了有关于 sort_values 的文档,成功解决先把单词出现频次由高往低依次排序,再把频次相同的情况下的单词按照 MD5 值排序这个问题,下面通过本文讲解下Python中pandas库sort_values()方法的使用,感兴趣的朋友一起看看吧
    2023-07-07
  • Python模拟键盘输入自动登录TGP

    Python模拟键盘输入自动登录TGP

    这篇文章主要介绍了Python模拟键盘输入自动登录TGP的示例代码,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • python调用shell的方法

    python调用shell的方法

    这篇文章主要介绍了python调用shell的方法,python调用shell命令的方法有许多种,大家可以参考使用
    2013-11-11
  • tensorflow实现将ckpt转pb文件的方法

    tensorflow实现将ckpt转pb文件的方法

    这篇文章主要介绍了tensorflow实现将ckpt转pb文件的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论