- 浏览: 28162 次
- 性别:
- 来自: 北京
最新评论
网上广为流传着"不要使用+" 连接字符串的“经验”, 特别是这篇文章当中提到了
http://www.oschina.net/question/129540_61768
-------
实际上果真如此吗? 连接字符串主要有四种用法:
我的理解是这样的
% 和 + 都是应付参数个数已知的、固定的,比如已经知道了a,b,c 三个参数了,那么a+b+c
str.join 和 += 主要是应付参数个数未知的、不固定的,比如参数的一个列表当中所有的字符串,这个列表长度未知;当然他们也可以应付参数个数固定的情况
我的开发环境是:
CPU: Intel(R) Xeon(R) E5520 @ 2.27GHz
Memory: 2G
OS: Ubuntu 12.04
第1回合使用
解释器:python 2.7.3
'use % to join' run 1000000 times, spent 2.045571 seconds
'use + ' run 1000000 times, spent 2.238076 seconds
'use str.join ' run 1000000 times, spent 1.816502 seconds
'use += ' run 1000000 times, spent 3.134726 seconds
-----
long items test:
'use % to join' run 1000000 times, spent 3.631465 seconds
'use + ' run 1000000 times, spent 3.203789 seconds
'use str.join ' run 1000000 times, spent 2.474077 seconds
'use += ' run 1000000 times, spent 3.927131 seconds
第2回合使用 pypy, 鉴于使用pypy的人多了起来, 这回是使用ubuntu12 自带的 pypy 1.8
解释器:pypy 1.8 (== python 2.7.2)
short items test:
'use % to join' run 1000000 times, spent 1.637780 seconds
'use + ' run 1000000 times, spent 1.498548 seconds
'use str.join ' run 1000000 times, spent 2.204772 seconds
'use += ' run 1000000 times, spent 2.955786 seconds
-----
long items test:
'use % to join' run 1000000 times, spent 3.570450 seconds
'use + ' run 1000000 times, spent 1.730548 seconds
'use str.join ' run 1000000 times, spent 2.914669 seconds
'use += ' run 1000000 times, spent 5.924469 seconds
第3回合使用 最新的PyPy 2.0 beta1
解释器:pypy 2.0 beta1 (== python 2.7.3)
short items test:
'use % to join' run 1000000 times, spent 0.749635 seconds
'use + ' run 1000000 times, spent 0.423104 seconds
'use str.join ' run 1000000 times, spent 1.319862 seconds
'use += ' run 1000000 times, spent 1.985512 seconds
-----
long items test:
'use % to join' run 1000000 times, spent 2.512883 seconds
'use + ' run 1000000 times, spent 0.414724 seconds
'use str.join ' run 1000000 times, spent 1.934615 seconds
'use += ' run 1000000 times, spent 4.973543 seconds
可以下个结论了:
在纯python上,无论长字符串还是短字符串: 参数个数已知 or 参数个数未知, 都用join吧
如果是pypy, 无论长字符串还是短字符串: 参数个数已知用+ , 未知用join吧; BTW, pypy 2.0beta 的速度确实挺快的
无论哪种情况+哪种解释器,的确是不要用 "+=" !
我的测试代码如下(特别感谢提醒“暗能量有点甜”http://www.weibo.com/kyuseishu 的提示,代码更简洁了):
http://www.oschina.net/question/129540_61768
引用
要使用 out = "<html>%s%s%s%s</html>" % (head, prologue, query, tail)
而避免 out = "<html>" + head + prologue + query + tail + "</html>"
而避免 out = "<html>" + head + prologue + query + tail + "</html>"
-------
实际上果真如此吗? 连接字符串主要有四种用法:
- %
- +
- str.join
- +=
我的理解是这样的
% 和 + 都是应付参数个数已知的、固定的,比如已经知道了a,b,c 三个参数了,那么a+b+c
str.join 和 += 主要是应付参数个数未知的、不固定的,比如参数的一个列表当中所有的字符串,这个列表长度未知;当然他们也可以应付参数个数固定的情况
我的开发环境是:
CPU: Intel(R) Xeon(R) E5520 @ 2.27GHz
Memory: 2G
OS: Ubuntu 12.04
第1回合使用
解释器:python 2.7.3
'use % to join' run 1000000 times, spent 2.045571 seconds
'use + ' run 1000000 times, spent 2.238076 seconds
'use str.join ' run 1000000 times, spent 1.816502 seconds
'use += ' run 1000000 times, spent 3.134726 seconds
-----
long items test:
'use % to join' run 1000000 times, spent 3.631465 seconds
'use + ' run 1000000 times, spent 3.203789 seconds
'use str.join ' run 1000000 times, spent 2.474077 seconds
'use += ' run 1000000 times, spent 3.927131 seconds
第2回合使用 pypy, 鉴于使用pypy的人多了起来, 这回是使用ubuntu12 自带的 pypy 1.8
解释器:pypy 1.8 (== python 2.7.2)
short items test:
'use % to join' run 1000000 times, spent 1.637780 seconds
'use + ' run 1000000 times, spent 1.498548 seconds
'use str.join ' run 1000000 times, spent 2.204772 seconds
'use += ' run 1000000 times, spent 2.955786 seconds
-----
long items test:
'use % to join' run 1000000 times, spent 3.570450 seconds
'use + ' run 1000000 times, spent 1.730548 seconds
'use str.join ' run 1000000 times, spent 2.914669 seconds
'use += ' run 1000000 times, spent 5.924469 seconds
第3回合使用 最新的PyPy 2.0 beta1
解释器:pypy 2.0 beta1 (== python 2.7.3)
short items test:
'use % to join' run 1000000 times, spent 0.749635 seconds
'use + ' run 1000000 times, spent 0.423104 seconds
'use str.join ' run 1000000 times, spent 1.319862 seconds
'use += ' run 1000000 times, spent 1.985512 seconds
-----
long items test:
'use % to join' run 1000000 times, spent 2.512883 seconds
'use + ' run 1000000 times, spent 0.414724 seconds
'use str.join ' run 1000000 times, spent 1.934615 seconds
'use += ' run 1000000 times, spent 4.973543 seconds
可以下个结论了:
在纯python上,无论长字符串还是短字符串: 参数个数已知 or 参数个数未知, 都用join吧
如果是pypy, 无论长字符串还是短字符串: 参数个数已知用+ , 未知用join吧; BTW, pypy 2.0beta 的速度确实挺快的
无论哪种情况+哪种解释器,的确是不要用 "+=" !
我的测试代码如下(特别感谢提醒“暗能量有点甜”http://www.weibo.com/kyuseishu 的提示,代码更简洁了):
#!/usr/bin/env python import time def show_run_time(name, count, func, args): start = time.time() for i in xrange(count): apply(func, [], args) print("'%s' run %d times, spent %.6f seconds"%(name, count, time.time()-start)) if __name__ == '__main__': count = 1000 * 1000 args1 = { #short items "a": "1"*3, "b": "2"*4, "c": "3"*5, "d": "4"*6, "e": "5"*7, "f": "6"*8, "g": "7"*9, "h": "8"*10, } args2 = { #long items "a": "1"*101, "b": "2"*131, "c": "3"*161, "d": "4"*191, "e": "5"*221, "f": "6"*251, "g": "7"*281, "h": "8"*311, } def test_str_format(a, b, c, d, e, f, g, h): out1 = "<html>%s%s%s%s%s%s%s%s</html>" % (a, b, c, d, e, f, g, h) out2 = "<table>%s%s%s%s%s%s%s%s</table>" % (h, b, c, d, e, f, g, a) return ("%s | %s"%(out1, out2)) def test_plus(a, b, c, d, e, f, g, h): out1 = "<html>" + a + b + c + d + e + f + g + b + "</html>" out2 = "<table>" + h + b + c + d + e + f + g + a + "</table>" return out1 + " | " + out2 def test_plus_and_equal(a, b, c, d, e, f, g, h): out = "<html>" for i in [a, b, c, d, e, f, g, h]: out += i out += "</html> | <table>" for i in [h, b, c, d, e, f, g, a]: out += i out += "</table>" return out def test_join(a, b, c, d, e, f, g, h): out1 = "".join(["<html>", a, b, c, d, e, f, g, h, "</html>"]) out2 = "".join(["<table>", h, b, c, d, e, f, g, a, "</table>"]) return " | ".join((out1, out2)) print "short items test:" show_run_time("use % to join", count, test_str_format, args1) show_run_time("use + ", count, test_plus, args1) show_run_time("use str.join ", count, test_join, args1) show_run_time("use += ", count, test_plus_and_equal, args1) print "-----" print "long items test:" show_run_time("use % to join", count, test_str_format, args2) show_run_time("use + ", count, test_plus, args2) show_run_time("use str.join ", count, test_join, args2) show_run_time("use += ", count, test_plus_and_equal, args2)
发表评论
-
wxpython如何查看某些控件发什么样的命令
2013-01-14 18:15 1508大家知道一些控件Button, List,Checkbox,S ... -
python 当中类的实例也能当函数使?靠__call__!(
2013-01-15 09:48 885python当中的一个class A的实例a1,经常看到有的源 ... -
a py to delete the trailling spaces and replace the "\t" with 4 spaces
2013-01-14 18:17 808#author: 54yuri import os i ... -
Python的lambda函数与排序
2013-01-14 18:16 2345Python的lambda函数与排序 2008-06-19 2 ... -
python把帮助导出到文件当中
2013-01-14 18:16 1231有时候在python 当中使用 import xxx ... -
自定义的模块下一定要加__init__.py , 否则当成普通目录来处理
2013-01-14 18:15 829一工程,结构如下 ├─MyProject ├─MyMo ... -
Python 当中逗号的一处用法
2013-01-13 19:17 1097曾经看到代码当中有一段颇为奇怪,是 b = 111 a = ... -
python的GUI设计理念,被震撼住了
2013-01-13 19:17 5533今天看到(2011-06-18)今天看到一句话,太给力了,给人 ... -
【转帖+改造】django HTTP Request 的调用层次
2013-01-13 19:16 1049from http://kasicass.blog.163.c ... -
【转帖】Understanding Python's "with" statement
2013-01-12 17:56 933Judging from comp.lang.python a ... -
【转帖】利用decorator实现Django表单防重复提交
2013-01-12 17:53 2166背景: 我的用例中不可出现重复的记录,如:下订单,用户填 ... -
virtualenv virtualenvwrapper python 多版本 多环境切换
2013-01-12 17:42 3145virtualenv是一个python工具. 它可以创建一个独 ... -
python 性能优化当中的几个谬误(1) -- 不要使用'+=' ?
2013-01-12 16:51 26网上广为流传着"不要使用+=" 连接字符串 ...
相关推荐
Python中的`str()`函数是将其他数据类型转换成字符串的关键工具。这个函数广泛应用于各种场景,包括输出、格式化和文本处理。以下是对`str()`函数及其相关扩展的详细解释。 1. **基本使用**: `str()`函数接受一个...
在Python编程语言中,字符串是数据处理的核心部分,特别是在各种编程任务中,如文本分析、数据清洗、报告生成等。本资源"头歌python程序设计答案-07-字符串拼接.ev4.rar"可能是一个教学视频或课程资料,专注于讲解...
file_out = str('_'.join(line.split())) + postfix # 使用split和join生成文件名 with open(file_out, 'w') as fout: # 以写的方式打开文件 fout.write(line.strip()) # 写入内容 ``` **知识点:** 1. **with...
1. 字符串操作:在Python中,字符串是不可变数据类型,意味着一旦创建就不能直接修改。尝试对字符串的某个位置赋值,如`info[2] = 'd'`会引发`TypeError`,因为字符串不支持这样的操作。 2. 替换字符串中的字符: ...
print(', '.join(str(num) for num in result)) ``` 13. **字符串转换** 将输入的字符串转换为大写,可以使用`str.upper()`方法: ```python user_input = input("请输入数据:") uppercase_data = user_...
在Python编程语言中,`str.join()`方法是一个非常实用的功能,它允许我们高效地将一个序列(如列表、元组等)中的多个...在学习Python字符串操作时,掌握`str.join()`是非常关键的一步,它能够提高代码的可读性和性能。
ss = './1/' + str(files[b]) + '/' pics = os.listdir(ss) i = 1 for each_bmp in pics: ``` 使用`while`循环遍历每个子文件夹,并获取其中的所有图片名称。 4. **图片处理逻辑**: ```python first_name,...
**Python库PyPika概述** PyPika是一个轻量级且高效的SQL构建库,专为Python设计,用于简化与MySQL数据库的交互。它提供了一种简单、直观的方式来构造和执行SQL查询,避免了直接字符串拼接带来的潜在错误和不安全性...
在Python编程语言的学习旅程中,"Day02"通常是初学者深入接触基础知识的关键阶段。这个压缩包文件"python-Day02.rar"很可能包含了第二天课程的所有资料,帮助学习者巩固第一天的知识并逐步掌握更多Python概念。让...
python 实现 PC端剪映字幕转换SRT格式工具代码-Python 实现,# -*- coding: utf-8 -*- import getpass import os import json import re def get_time(time_int): # 使用正则表达式处理时间格式化问题 if time_...
在IT行业中,自动化办公是提高效率的关键之一,Python作为一种强大的编程语言,因其简洁易学的语法和丰富的库支持,常被用于实现各种自动化任务,包括批量重命名文件。本资料"Python源码自动办公-13 用Python批量...
【Python基础编程】 Python是一种高级、解释型、交互式和面向对象的脚本语言,以其简洁易读的语法和强大的功能而闻名。本教程适用于完全没有Python知识基础的学习者,直接从基础语法开始教学,无需了解Python的历史...
result = ', '.join(str(year) for year in range(2000, 3201) if year % 7 == 0 and year % 5 != 0) print(result) ``` 8. 排序成绩: 输入三个成绩,可以使用内置的sorted函数对成绩进行排序,然后依次输出。 `...
### Python开发中的常见语法处理 Python作为一种广泛应用的编程语言,在数据处理、Web开发以及科学计算等领域都有着出色的表现。本文将围绕“Python开发常见语法处理”这一主题,详细讲解包括字符替换、字符截取、...
在Python编程语言中,字符串(str)是一种基本的数据类型,用于存储文本信息。字符串是不可变的,这意味着一旦创建,就不能直接修改字符串中的单个字符。以下是对字符串操作的详细说明: 1. **创建字符串**:你可以...
1. **变量与数据类型**:Python中的变量是存储值的容器,可以是整数、浮点数、字符串等。基础数据类型包括int、float、str、bool等。了解如何声明和使用这些变量是学习Python的第一步。 2. **运算符**:Python支持...
str3 = "".join([str1, str2]) print(str3) # 输出 "HelloWorld" ``` 2. **字符串的替换**: - `replace()`方法用于替换字符串中的某个子串。例如: ```python str1 = "Hello World" str2 = str1.replace(...
Python中的`join()`函数是字符串操作的一个核心方法,它允许我们将序列(如列表、元组、集合或字典)中的元素连接成一个单一的字符串。这个功能在处理文本数据时尤其有用,例如在生成报告、格式化输出或者构建复杂的...
- 字符串(str)可以拼接,如`"Python", "语言"`。 - 元组(tup)可以用逗号分隔创建,也可以用`.join()`方法连接,如`("123", "234")`。 - 集合(set)可以进行并集操作,但`{1, 2, 3} + {4, 5, 6}`是错误的,因为集合...