首页 > 解决方案 > 方法 vs 属性哪个更快?

问题描述

bs4.BeautifulSoup,有bs4.element.Tag对象。它有属性text ,也有方法get_text。两者都返回相同的结果text(str).

我很好奇

“方法与属性”

哪个访问速度更快?

我检查我的本地 by time.time(),但在每次运行中,结果都会改变。

这是无用的好奇吗?

标签: pythonclassmethodsbeautifulsoupproperties

解决方案


text属性只能按原样给出文本。

get_text()可以做一些“定制”。就像在不同标签的文本之间插入分隔符或从字符串的末尾去除空格一样。


get_text()接受以下参数:

  • separator:在各个标签的文本之间插入一个字符串作为分隔符。
  • strip: 去掉标签文本的结尾处的空格。

考虑

html_str = """
<div>
\nHello
  <span>World!</span>
  <a href="">Click here</a>
</div>
"""
soup = BeautifulSoup(html_str, 'html.parser')

如果我们考虑<div>标签的文本

soup.text

这将是

'\n\n\nHello\n  World!\nClick here\n\n'

如果strip使用参数

>>> soup.get_text(strip=True)
'HelloWorld!Click here'

如果separator使用参数

>>> soup.get_text(separator='**')
'\n**\n\nHello\n  **World!**\n**Click here**\n**\n'

如果同时使用separatorstrip

>>> soup.get_text(separator='**', strip=True)
'Hello**World!**Click here'

运行时间似乎大致相同。

%timeit soup.text
4.16 µs ± 56.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit soup.get_text(strip=True)
5.38 µs ± 154 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit soup.get_text(separator='**')
4.16 µs ± 53.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit soup.get_text(separator='**', strip=True)
5.45 µs ± 213 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

推荐阅读