由于您仅测量startswith返回True的情况,因此该比较是不公平的。

>>> x = 'foobar'

>>> y = 'fool'

>>> %timeit x.startswith(y)

1000000 loops, best of 3: 221 ns per loop

>>> %timeit x[:3] == y # note: length mismatch

10000000 loops, best of 3: 122 ns per loop

>>> %timeit x[:4] == y

10000000 loops, best of 3: 158 ns per loop

>>> %timeit x[:len(y)] == y

1000000 loops, best of 3: 210 ns per loop

>>> sw = x.startswith

>>> %timeit sw(y)

10000000 loops, best of 3: 176 ns per loop

另外,对于更长的字符串,startswith快得多:

>>> import random

>>> import string

>>> x = '%030x' % random.randrange(256**10000)

>>> len(x)

20000

>>> y = r[:4000]

>>> %timeit x.startswith(y)

1000000 loops, best of 3: 211 ns per loop

>>> %timeit x[:len(y)] == y

1000000 loops, best of 3: 469 ns per loop

>>> sw = x.startswith

>>> %timeit sw(y)

10000000 loops, best of 3: 168 ns per loop

没有比赛时仍然如此。

# change last character of y

>>> y = y[:-1] + chr((ord(y[-1]) + 1) % 256)

>>> %timeit x.startswith(y)

1000000 loops, best of 3: 210 ns per loop

>>> %timeit x[:len(y)] == y

1000000 loops, best of 3: 470 ns per loop

>>> %timeit sw(y)

10000000 loops, best of 3: 168 ns per loop

# change first character of y

>>> y = chr((ord(y[0]) + 1) % 256) + y[1:]

>>> %timeit x.startswith(y)

1000000 loops, best of 3: 210 ns per loop

>>> %timeit x[:len(y)] == y

1000000 loops, best of 3: 442 ns per loop

>>> %timeit sw(y)

10000000 loops, best of 3: 168 ns per loop

因此,对于短字符串,startswith可能较慢,因为它针对长字符串进行了优化。

(技巧是从此答案中获取随机字符串。)

python为什么慢_python-为什么startswith比切片慢相关推荐

  1. python endswith函数_Python的startswith和endswith

    做文本处理的时候经常要判断一个文本有没有以一个子串开始,或者结束.Python为此提供了两个函数: S.startswith(prefix[, start[, end]]) -> bool 如果 ...

  2. python常用技巧_python 实用的30个小技巧

    所有的这些技巧都能帮助你压缩代码并且优化运行.此外,你可以在日常工作中很容易地在真实项目中使用他们. 贴士#1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法 ...

  3. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

  4. python字符串解释_Python学习:字符串的简单解释,深入浅出

    字符串是python很常见的一种数据类型,比如日志的打印,程序中函数的注释,数据库的访问,变量的操作都需要用到字符串. 一.字符串基础 字符串是由独立字符组成的一个序列,通常包含在单引号('')双引号 ...

  5. python 小说 云_python小说网站

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python爬虫之小说网站--下载小说(正则表达式)思路:1. 找到要下载的小说 ...

  6. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

  7. Python学习教程(Python学习视频_Python学习路线):Day04循环结构

    Python学习教程(Python学习视频_Python学习路线):循环结构 循环结构的应用场景 如果在程序中我们需要重复的执行某条或某些指令,例如用程序控制机器人踢足球,如果机器人持球而且还没有进入 ...

  8. python字符串操作、实验报告册——— 切片

    设计一个程序,输入是一个字符串"重庆工程学院软件与人工智能学院",按要求输出: 1. 输出这个字符串的长度 2. 用切片的方式用一句Python语句输出"重庆工程学院&q ...

  9. python三维图切片提取_详解Python二维数组与三维数组切片的方法

    如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度: 如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间 ...

最新文章

  1. 好文推荐,15 分钟教你搞懂 Git!
  2. Linux-0.00 代码解析(三)
  3. OS / Linux / pthread_join() 和 pthread_detach() 函数区别
  4. linux下的系统监控软件,Linux系统监控工具sysstat
  5. 关于gui的skinnableContainer的一点问题
  6. php的list函数的使用,php list函数如何使用
  7. linux通过vnc掉出浏览器,VNC远程Linux桌面控制好用 --尤其是用浏览器
  8. Spring AOP与拦截器的区别
  9. 如何抓住软件测试的主线及确定主要功能?
  10. 【正则】正则表达式基础知识大全
  11. android sd卡 f2fs,F2FS保你18个月不卡?手机文件系统相关科普
  12. PHP判断访客是否移动端浏览器访问的四种方法
  13. odac与oracle,适用于 Windows 的 64 位 Oracle Data Access Components (ODAC) | Oracle 中国
  14. 2021年了,还有人认为视觉导航不如激光导航
  15. app开发前后端简易流程图
  16. Sails基础之Controller层
  17. SQLDBX找不到服务器 no server found
  18. 做程序员10年有感,程序员必须要懂的---转自java诺曼底_kleen
  19. java linux gui_关于Java:安装Linux桌面/ GUI环境
  20. 用python爬取交大图书馆图书信息

热门文章

  1. [转载]在线文档预览方案-Office Web Apps
  2. 云计算安全解决方案白皮书(二)
  3. C#对图片文件的压缩、裁剪操作初探
  4. SQL SERVER 2008 利用发布订阅方式实现数据库同步
  5. 转:AIX rcp跨主机远程拷贝数据
  6. php比较3个数大小写,php在前n个字符的字符串比较(大小写敏感)的函数strncmp()...
  7. mysql两个表条件_mysql – 在另一个表中选择具有多个条件的...
  8. android 系统的切图方式_UI设计切图规范
  9. 正则表达式 html链接,ASP超级链接和HTML函数正则表达式 修正版
  10. oracle rowid mysql_相当于Oracle的RowID在MySQL中