python中Lambda表达式详解

yipeiwu_com5年前Python基础

如果你在学校读的是计算机科学专业,那么可能学过 Lambda 表达式, 不过可能从来没有用过它。如果你不是计算机科学专业,它们看着可能 有点儿陌生(或者只是“曾经学习过的东西”)。在这一节里,虽然我们 不打算深入学习这类函数,但是会用几个例子来演示它们是如何用在网 页抓取中的。

Lambda 表达式本质上就是一个函数,可以作为变量传入另一个函数; 也就是说,一个函数不是定义成 f(x, y),而是可以定义成 f(g(x), y) 或 f(g(x), h(y)) 的形式。 BeautifulSoup 允许我们把特定类型的函数作为参数传入 find_all 函 数。唯一的限制条件是这些函数必须把一个标签对象作为参数并且返回 布尔类型的结果。BeautifulSoup 用这个函数来评估它遇到的每个标签对 象,最后把评估结果为“真”的标签保留,把其他标签剔除。

例如,下面的代码就是获取有两个属性的所有标签:

bs.find_all(lambda tag: len(tag.attrs) == 2)

这里,作为参数传入的函数是 len(tag.attrs) == 2。当该参数为真 时,find_all 函数将返回 tag。即找出带有两个属性的所有标签,如 下所示:

<div class="body" id="content"></div>
<span style="color:red" class="title"></span>

Lambda 函数非常实用,你甚至可以用它来替代现有的 BeautifulSoup 函 数:

bs.find_all(lambda tag: tag.get_text() ==  
'Or maybe he\'s only resting?')

如果不使用 Lambda 函数,代码如下:

bs.find_all('', text='Or maybe he\'s only resting?')

如果你能记住 Lambda 函数的语法,以及如何获取标签的属性,那么你 可能再也不需要记住 BeautifulSoup 的语法了!

由于 Lambda 函数可以是任意返回 True 或者 False 值的函数,你甚至 可以结合使用 Lambda 函数与正则表达式,来查找匹配特定字符串模式 的属性的标签。

以上就是关于python Lambda表达式的相关知识点内容,感谢大家的阅读和对【听图阁-专注于Python设计】的支持。

相关文章

Python RabbitMQ消息队列实现rpc

Python RabbitMQ消息队列实现rpc

上个项目中用到了ActiveMQ,只是简单应用,安装完成后直接是用就可以了。由于新项目中一些硬件的限制,需要把消息队列换成RabbitMQ。 RabbitMQ中的几种模式和机制比Acti...

详解Django中CBV(Class Base Views)模型源码分析

详解Django中CBV(Class Base Views)模型源码分析

在view文件中编写一个类,并配置好路由 class Test(View): def get(self, request, *args, **kwargs): return Ht...

django商品分类及商品数据建模实例详解

基类(商品类及分类类之间共同的字段) class BaseModle(models.Model): name = models.CharField(max_length=32,...

深入理解Python 关于supper 的 用法和原理

一、前言 Python 面向对象中有继承这个概念,初学时感觉很牛逼,里面也有个super类,经常见到,最近做一些题才算是理解了。特地记录分享给后来研究的小伙伴,毕竟现在小学生都开始学了(...

Python数据分析之获取双色球历史信息的方法示例

本文实例讲述了Python数据分析之获取双色球历史信息的方法。分享给大家供大家参考,具体如下: 每个人都有一颗中双色球大奖的心,对于技术人员来说,通过技术分析,可以增加中奖几率,现使用p...