python - 方法 vs 属性哪个更快?
问题描述
中bs4.BeautifulSoup
,有bs4.element.Tag
对象。它有属性text
,也有方法get_text
。两者都返回相同的结果text(str).
我很好奇
“方法与属性”
哪个访问速度更快?
我检查我的本地 by time.time()
,但在每次运行中,结果都会改变。
这是无用的好奇吗?
解决方案
该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'
如果同时使用separator
和strip
>>> 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)
推荐阅读
- qt - Qt/qmake 抑制来自第三方头文件的警告/问题
- python - 无法使用 xpath 找到带有事件标记的节点/元素
- spring - 构建某些组件后如何配置Spring Boot启动Tomcat?
- android - Xamarin:我如何以及在哪里指定设计方面?
- laravel - 包管理器 - 如何扩展具有模块更新能力的模块
- swift - 上一个视图控制器中的更新按钮
- java - 文件不存在时带有 InputStreamResource 情况的 Spring Boot 下载文件
- azure-devops - 从脚本创建 Azure 管道
- wordpress - id="wpadminbar 可视化问题
- javascript - 用 React js 写一个函数