gpt4 book ai didi

python - 你能解释一下这个 python 对方括号的使用吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:42 24 4
gpt4 key购买 nike

有人可以帮助我理解 beautifulsoup3 文档中的这段代码吗?特别是我不理解方括号中的部分。代码来自这个网址:http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html我不理解方括号,因为我认为方括号是用来制作列表的,它的内容是否创建了一个列表?此外,它似乎没有将列表分配给任何东西。使用方括号而不将它们分配给任何东西的目的是什么?另外,我不理解这个组件:text=lambda text:isinstance(text, Comment),但我想我可以自己弄清楚这部分内容。

from BeautifulSoup import BeautifulSoup, Comment
soup = BeautifulSoup("""1<!--The loneliest number-->
<a>2<!--Can be as bad as one--><b>3""")
comments = soup.findAll(text=lambda text:isinstance(text, Comment))
[comment.extract() for comment in comments]
print soup
# 1
# <a>2<b>3</b></a>

好吧,这是为了列表理解,所以,正在制作一个列表?但是没有被使用?他们为什么要这样做?另外,什么时候以及为什么要在“for”这个词之前加上任何东西?就像他们在那里做的那样。通常我会在开头看到“for”,前面没有任何内容。另外,感谢您对 lambda 函数的精彩解释,我知道它构成了某种迷你函数,但我还不太熟悉它,它有助于了解您如何将它重写为一个普通函数。

最佳答案

方括号中的部分称为list comprehension - 基本上是创建列表的捷径。

它没有分配给任何东西的原因是这里不需要它。 extract() 方法会为每个找到的评论调用,它会循环删除每个评论。这实际上很困惑,最好是这样写:

for comment in comments:
comment.extract()

要理解 soup.findAll(text=lambda text:isinstance(text, Comment)) 是什么,您需要理解两个关键点:

  • 根据 text 参数的文档:

text is an argument that lets you search for NavigableString objects instead of Tags. Its value can be a string, a regular expression, a list or dictionary, True or None, or a callable that takes a NavigableString object as its argument

请注意,对我们来说最重要的是,text 参数的值可以是一个 callable,或者换句话说,一个函数。

  • 现在 lambda text:isinstance(text, Comment) 是一种用于在 Python 中编写匿名函数的特殊语法。它与您将拥有的相同:

    def my_function(text):
    return isinstance(text, Comment)

它所做的是检查每个 NavigableString 对象是否为 Comment 类的实例。换句话说,检查它找到的文本是否是 HTML 注释。


作为旁注,不要花时间在 BeatifulSoup3 上,因为它不再被维护和支持,切换到 BeautifulSoup4 .

关于python - 你能解释一下这个 python 对方括号的使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26837074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com