python中的str性能

2024-04-13

在分析一段 python 代码时(python 2.6 up to 3.2),我发现str将对象(在我的例子中是整数)转换为字符串的方法几乎比使用字符串格式化慢一个数量级。

这是基准

>>> from timeit import Timer
>>> Timer('str(100000)').timeit()
0.3145311339386332
>>> Timer('"%s"%100000').timeit()
0.03803517023435887

有谁知道为什么会这样? 我错过了什么吗?


'%s' % 100000由编译器计算,相当于运行时的常量。

>>> import dis
>>> dis.dis(lambda: str(100000))
  8           0 LOAD_GLOBAL              0 (str)
              3 LOAD_CONST               1 (100000)
              6 CALL_FUNCTION            1
              9 RETURN_VALUE        
>>> dis.dis(lambda: '%s' % 100000)
  9           0 LOAD_CONST               3 ('100000')
              3 RETURN_VALUE        

%使用运行时表达式并不(明显)快于str:

>>> Timer('str(x)', 'x=100').timeit()
0.25641703605651855
>>> Timer('"%s" % x', 'x=100').timeit()
0.2169809341430664

请注意str还是稍微慢一点,正如@DietrichEpp所说,这是因为str涉及查找和函数调用操作,而%编译为单个立即字节码:

>>> dis.dis(lambda x: str(x))
  9           0 LOAD_GLOBAL              0 (str)
              3 LOAD_FAST                0 (x)
              6 CALL_FUNCTION            1
              9 RETURN_VALUE        
>>> dis.dis(lambda x: '%s' % x)
 10           0 LOAD_CONST               1 ('%s')
              3 LOAD_FAST                0 (x)
              6 BINARY_MODULO       
              7 RETURN_VALUE        

当然,上述情况对于我测试的系统(CPython 2.7)来说是正确的;其他实现可能有所不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中的str性能 的相关文章

  • pyspark 数据框中的自定义排序

    是否有推荐的方法在 pyspark 中实现分类数据的自定义排序 我理想地寻找 pandas 分类数据类型提供的功能 因此 给定一个数据集Speed列 可能的选项是 Super Fast Fast Medium Slow 我想实现适合上下文的
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • Pandas:如果单元格包含特定文本则删除行

    pandas 中的这段代码不起作用 如果该列包含提供的任何文本 数字 我希望它删除该行 目前 我只能在单元格与我的代码中传递的确切文本匹配时才能使其工作 因为它只删除显示 Fin 的单元格不是金融或金融 df2 df df Team Fin
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • Gspread如何复制sheet

    在 Stackoverflow 上进行谷歌搜索和搜索后 我想我找不到有关如何复制现有工作表 现有模板工作表 并将其保存到另一个工作表中的指南 根据文档 有重复表 https gspread readthedocs io en latest
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • Matplotlib 中 x 轴标签的频率和旋转

    我在下面编写了一个简单的脚本来使用 matplotlib 生成图形 我想将 x tick 频率从每月增加到每周并轮换标签 我不知道从哪里开始 x 轴频率 我的旋转线产生错误 TypeError set xticks got an unexp
  • Python pip install pyarrow错误,无法执行'cmake'

    我尝试在 EMR 集群的主实例上安装 pyarrow 但总是收到此错误 hadoop ip XXX XXX XXX XXX sudo usr bin pip 3 4 install pyarrow Collecting pyarrow Do
  • 使用 Keras np_utils.to_categorical 的问题

    我正在尝试将整数的 one hot 向量数组制作为 keras 将能够使用的 one hot 向量数组来拟合我的模型 这是代码的相关部分 Y train np hstack np asarray dataframe output vecto
  • Python:IndexError:修改代码后列表索引超出范围

    我的代码应该提供以下格式的输出 我尝试修改代码 但我破坏了它 import pandas as pd from bs4 import BeautifulSoup as bs from selenium import webdriver im
  • ANTLR 获取并拆分词法分析器内容

    首先 对我的英语感到抱歉 我还在学习 我为我的框架编写 Python 模块 用于解析 CSS 文件 我尝试了 regex ply python 词法分析器和解析器 但我发现自己在 ANTLR 中 第一次尝试 我需要解析 CSS 文件中的注释
  • IronPython 中批量求值表达式的性能

    在 C 4 0 应用程序中 我有一个具有相同长度的强类型 IList 的字典 一个基于动态强类型列的表 我希望用户根据将在所有行上聚合的可用列提供一个或多个 python 表达式 在静态上下文中它将是 IDictionary
  • Anaconda 无法导入 ssl 但 Python 可以

    Anaconda 3 Jupyter笔记本无法导入ssl 但使用Atom终端导入ssl没有问题 我尝试在 Jupyter 笔记本中导入 ssl 但出现以下错误 C ProgramData Anaconda3 lib ssl py in
  • 要做或不做:将图像存储在数据库中[重复]

    这个问题在这里已经有答案了 在 Web 应用程序的上下文中 我的前老板总是说在数据库中放置对图像的引用 而不是图像本身 我倾向于同意在数据库中存储 url 与图像本身是一个好主意 但在我现在工作的地方 我们在数据库中存储大量图像 我能想到的
  • 如何与其他用户一起使用 pyenv?

    如何与其他用户一起使用 pyenv 例如 如果我在用户 test 的环境中安装了 pyenv 则当我以 test 身份登录时可以使用 pyenv 但是 当我以其他用户 例如 root 身份登录时如何使用 pyenv 即使你这么做了 我也会s
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • 双击打开 ipython 笔记本

    相关文章 通过双击 osx 打开 ipython 笔记本 https stackoverflow com questions 16158893 open an ipython notebook via double click on osx
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此
  • 根据列中的部分字符串匹配选择数据框行

    我想根据列中字符串的部分匹配从数据框中选择行 例如列 x 包含字符串 hsa 使用sqldf if它有一个like语法 我会做类似的事情 select from lt gt where x like hsa 很遗憾 sqldf不支持该语法

随机推荐

  • System.getProperty("user.name") 返回 HOSTNAME 而不是当前记录的用户名

    Here System getProperty user name 返回 Windows Server 2008 计算机的主机名而不是当前登录的用户名 下面是我的代码 final String user System getProperty
  • PHP 删除另一个数组项(如果存在)[重复]

    这个问题在这里已经有答案了 我有 2 个对象数组 数组 A 和数组 B 如何检查数组 B 中的对象是否存在于数组 A 中 如果存在 则将其从数组 A 中删除 Example Array A id 1 name item1 id 2 name
  • 将 string 类型转换为 unsigned int 时出现故障

    我编写的 C 函数遇到了一个恼人的问题 该函数的目的是验证用户输入 该函数读取用户输入 验证它是否是数字 如果是 则验证它是否在 min max 范围内 当我使用无符号类型调用模板函数时 就会出现问题 例如size t 输入为负数 字符串流
  • 数组行为混乱[重复]

    这个问题在这里已经有答案了 在编码测试中 我最近遇到一个问题 要求我找出控制台中将打印什么内容 问题如下 我不明白下面的代码将如何被理解和执行 需要帮忙 var arr a b c d 1 2 3 console log arr 这个 ar
  • 如何开发像 Coffee Script 这样的编程语言?

    要开发像咖啡脚本这样的编程语言 我需要知道的初始要求是什么 它基本上有自己的语法 但在编译后会更改为另一种语言 我对此进行了谷歌搜索 但找不到正确的答案 使用基本语言指定您的语言形式语法 http en wikipedia org wiki
  • Qt C++ QString 到 QByteArray 转换

    我创建了一个加密 解密程序 加密时我将加密的 QByteArray 存储在文本文件中 当尝试解密时 我检索了它 然后将其放入解密方法中 问题是我需要一种将其转换为 QByteArray 的方法不改变格式 否则无法正确解密 我的意思是 如果该
  • 用于转换 pandas groupby 数据框的 Python lambda 函数语法

    这应该是一个非常简单的问题 我有两行代码 第一个有效 第二个给出以下错误 SyntaxError invalid syntax 这是两行代码 第一行 工作正常 对 off0 on1 1 的行进行计数 第二行尝试对 off0 on1 0 的行
  • Java Socket 创建需要更多时间

    我给了Socket soc new Socket host port 现在 当主机启动并处于运行状态时 套接字将立即创建 但是 当机器关闭或重新启动时 该行大约需要 40 秒才能响应 我尝试使用soc setSoTimeout timeou
  • HBase 作为 Web 应用程序后端

    任何人都可以建议将 HBase 作为基于 Web 的应用程序的主要数据源是否是一个好主意 我主要关心的是 HBase 对查询的响应时间 是否有可能实现亚秒级响应 编辑 有关应用程序本身的更多详细信息 数据量 约500GB文本数据 预计很快将
  • 如何生成不带绿色复选标记的签名 PDF

    我正在使用 iText 签署 PDF 我在签名中添加了图形 这是可行的 但是验证文档时显示的绿色复选标记 或黄色问号 会干扰我插入的图形 使最终结果看起来很难看 它要么显示在签名图形的上方或下方 但我无法让它消失 有谁知道如何解决这一问题
  • JMS 生产者中的错误:AMQ212054 目标地址被阻止

    我正在尝试使用 Spring Boot 2 1 1 RELEASE 连接到远程 Artemis 2 6 3 发送器 到目前为止 在我发现的所有示例中 发件人在尝试发送消息时都会挂起 例如here https grokonez com spr
  • I-码头或码头

    我有一个要在 Android 设备上托管的网络应用程序 我目前正在使用 android sdk 提供的模拟器 我的应用程序将同时提供静态和动态数据 我目前使用的是jetty版本6 1 22 我想问什么是更好的选择 1 Jetty 网络服务器
  • 配置多个下一个插件:withMDX、withBundleAnalyzer

    我开始了一个nextjs网站已经附带了顺风博客启动器withBundleAnalyzer在 next config js 中 我现在正在努力获得 mdx文件直接从页面工作 文档说我需要withMDX在我的 nextjs config 文件中
  • PHP反序列化问题

    为什么反序列化没有恢复我的数组 请参阅下面的代码 prints a 1 s 8 txn type s 32 recurring payment profile cancel echo item response prints nothing
  • Android:验证密码、确认密码并通过按钮传递字符串值

    我的注册页面中有密码 确认密码和性别等字段 密码编辑文本 确认密码编辑文本 性别 按钮01 按钮02 对于密码和一致密码 我想验证这两个字段 我的意思是两个字段的条目 字符串值 应该相同 如果两者相同 那么我只想将密码值传递到服务器 而不是
  • 如何重新启动 git/GitHub 项目?

    我已经在 GitHub 上托管的项目上工作了一段时间 然而 我现在决定以不同的方式重写我的应用程序 并从头开始 我重命名了旧的本地存储库并创建了一个新的 如何使用新存储库替换 GitHub 上托管的存储库 我真的不在乎我的旧历史和问题是否存
  • 设置嵌入式 h2 数据库的端口号

    I use h2内存数据库仅用于测试目的 默认端口似乎是8082 这导致我的测试在 Heroku 上失败 我想更改此端口号 我怎样才能做到这一点 到目前为止我所做的 我的本地计算机上似乎有一个文件 USER HOME h2 server p
  • 异步方法上的 C# 实体框架错误

    我已经看到了这一点 但我遇到了另一个问题 我有这个服务类用于管理 ASP NET 身份角色 public class RoleService IRoleService private readonly RoleManager
  • 使用 Xptr 和 Function 调用 Rcpp 函数 - 仅 xptr 情况有效

    我正在尝试开发一个包 其中我需要输入用户的函数 可以使用定义Rcpp or in R 将其发送到另一个函数 在包内 struct并在那里处理它 当我使用Rcpp Xptr 即函数指针 代码可以工作 但同样不起作用Rcpp Function
  • python中的str性能

    在分析一段 python 代码时 python 2 6 up to 3 2 我发现str将对象 在我的例子中是整数 转换为字符串的方法几乎比使用字符串格式化慢一个数量级 这是基准 gt gt gt from timeit import Ti