python中Lambda表达式详解

yipeiwu_com7年前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+OpenCV 实现图片无损旋转90°且无黑边

Python+OpenCV 实现图片无损旋转90°且无黑边

0. 引言 有如上一张图片,在以往的图像旋转处理中,往往得到如图所示的图片。 然而,在进行一些其他图像处理或者图像展示时,黑边带来了一些不便。本文解决图片旋转后出现黑边的问题,实现了...

python单例模式原理与创建方法实例分析

本文实例讲述了python单例模式原理与创建方法。分享给大家供大家参考,具体如下: 1. 单例是什么 举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站...

python sqlobject(mysql)中文乱码解决方法

UnicodeEncodeError: 'latin-1' codec can't encode characters in position; 找了一天终于搞明白了,默认情况下,mys...

不管你的Python报什么错,用这个模块就能正常运行

不管你的Python报什么错,用这个模块就能正常运行

Fucklt.py 使用了最先进的技术能够使你的代码不管里面有什么样的错误,你只管 FuckIt,程序就能"正常"执行,兵来将挡水来土掩。 是不是感觉很不讲道理,这样还担心自己的代码不能...

python ddt数据驱动最简实例代码

在接口自动化测试中,往往一个接口的用例需要考虑 正确的、错误的、异常的、边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例。如果测试接口很多,不但需要写大量的代码,测试数据和代...