Skip to main content
 首页 » 编程设计

python之理解 python 中的 lambda 函数

2025年05月04日15duanxz

我正在看这篇文章:

Python BeautifulSoup: wildcard attribute/id search

其中答案给出了解决方案:

dates = soup.findAll("div", {"id": lambda L: L and L.startswith('date')})

我以为我理解了 python 中的 lambda 函数。然而,当我看到这个 lambda L:L 和 L.startswith('date'),我知道它最终会返回一个 id,该 id 的值包含“date”。但是为什么写成 L and L.startswith('date') 呢?这看起来 lambda 函数正在返回一个字符串和一个 bool 语句。

有人可以解释一下这背后的逻辑吗?

请您参考如下方法:

and 实际上并不返回 bool 值,即它并不总是返回 True 或 False。

它所做的是检查第一个值的真实性。有些东西是假的,比如 None,或者 0,或者 False,或者 []。其他都是真实的。

如果第一个值是假的,它被返回。如果为真,则返回第二个值。如果只考虑结果的真值,那就是和逻辑运算符的短路实现。

在 lambda L: L 和 L.startswith('date') 中使用它的原因是为了确保此函数在 L 的情况下不会抛出异常> 是 无。如果是,lambda 会立即返回 None,因为它是假的。如果没有检查,startswith() 调用将抛出异常,因为 None 没有该方法。

在 Python 提示符下尝试以下操作:

l = lambda L: L and L.startswith('date') 
 
l(None) 
l('') 
l('does not start with date') 
l('date this one does') 
l(0) 
l(1)