字符串join函数for循环+区别:

原因是这样的,字符串是不可变对象,当用操作符+连接字符串的时候,每执行一次+都会申请一块新的内存,然后复制上一个+操作的结果和本次操作的右操作符到这块内存空间,因此用+连接字符串的时候会涉及好几次内存申请和复制。而join在连接字符串的时候,会先计算需要多大的内存存放结果,然后一次性申请所需内存并将字符串复制过去,这是为什么join的性能优于+的原因。所以在连接字符串数组的时候,我们应考虑优先使用join。
---------------------
作者:shs867
来源:CSDN
原文:https://blog.csdn.net/shs867/article/details/79924712
版权声明:本文为博主原创文章,转载请附上博文链接!

测试环境:windows10+python3.7

测试代码1

from time import time
import functools
BASE_STR = 'basebase'
STRS = ['str_'+str(i) for i in range(10**6)] def excute_time(func):
@functools.wraps(func)
def inner(*args, **kw):
start_time = time()
res = func(*args, **kw)
end_time = time()
print('{} 执行耗时{:.3f}秒'.format(func.__name__, end_time-start_time))
return res
return inner @excute_time
def str_merge_by_add():
'''测试字符串相加'''
result = ''
for item in STRS:
result += item @excute_time
def str_merge_by_add2():
'''测试字符串相加'''
result = ''
for item in STRS:
result = result + item @excute_time
def str_merge_by_join():
'''测试join函数'''
result = ''
result = ''.join(STRS) if __name__ == '__main__':
for i in range(3):
str_merge_by_add()
str_merge_by_add2()
str_merge_by_join()

测试结果1

1. 因为省去了生成中间对象,join效率远远高于那种for循环中有临时变量的代码

2. =比+=用时要多

测试代码2

因为怀疑是for自己写的临时变量影响效率,遂写成一连串字符串直接相加

from time import time
import functools
TOTAL = 10**6 # def excute_time(fun_name=None):
# '''打印执行时间,如果传入fun_name,则输出语句显示传入名,否则显示被装饰函数的名字'''
# def wrapper(func):
# @functools.wraps(func)
# def inner(*args, **kw):
# print(args,kw)
# start_time = time()
# res = func(*args, **kw)
# end_time = time()
# print('{} 执行耗时{:.3f}秒'.format(fun_name or func.__name__, end_time-start_time))
# return res
# return inner
# return wrapper def excute_time(func):
'''打印执行时间,显示传入的函数的名称'''
@functools.wraps(func)
def inner(*args, **kw):
start_time = time()
res = func(*args, **kw)
end_time = time()
func_name = func.__name__
if type(args[0]) is type(excute_time):
func_name = args[0].__name__
print('{} 执行耗时{:.3f}秒'.format(func_name, end_time-start_time))
return res
return inner @excute_time
def run(func, n=TOTAL):
'''循环运行TOTAL次'''
while n>0:
func()
n = n-1 def str_add():
'''字符串直接加'''
result = 'ab' + 'ab' + 'ab' + 'ab' + 'ab' + 'ab' + 'ab' + 'ab' + 'ab' def str_add2():
'''字符串直接加'''
temp = ['ab', 'ab', 'ab', 'ab', 'ab', 'ab', 'ab', 'ab', 'ab']
result = 'ab' + 'ab' + 'ab' + 'ab' + 'ab' + 'ab' + 'ab' + 'ab' + 'ab' def str_join():
temp = ['ab', 'ab', 'ab', 'ab', 'ab', 'ab', 'ab', 'ab', 'ab']
result = ''.join(temp) if __name__ == '__main__':
for i in range(3):
run(str_add)
run(str_add2)
run(str_join)

测试结果2

可发现join比字符串直接相加要慢,似乎网上常见的说法有问题,个人猜测,错误之处请指出

参考

Python中连接字符串用join还是+

字符串join函数跟+号测试的更多相关文章

  1. 说明split()与join()函数的区别?

    前者是切割成数组的形式,后者是将数组转换成字符串join函数获取一批字符串,然后用分隔符字符串将它们连接起来,从而返回一个字符串.Split函数获取一个字符串,然后再分隔符处将其断开,从而返回一批字符 ...

  2. python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用

    在抓取网络数据的时候,有时会用正则对结构化的数据进行提取,比如 href="https://www.1234.com"等.python的re模块的findall()函数会返回一个所 ...

  3. Python中字符串操作函数string.split('str1')和string.join(ls)

    Python中的字符串操作函数split 和 join能够实现字符串和列表之间的简单转换, 使用 .split()可以将字符串中特定部分以多个字符的形式,存储成列表 def split(self, * ...

  4. PHP中常用的字符串格式化函数总结

    注意:在PHP中提供的字符串函数处理的字符串,大部分都不是在原字符串上修改,而是返回一个格式化后的新字符串. 一.取出空格和字符串填补函数 空格也是一个有效的字符,在字符串中也会占据一个位置.用户在表 ...

  5. php字符串处理函数常见问题

    PHP 的字符串处理功能非常强大,主要包括: 字符串输出 echo():输出一个或多个字符串 print():输出一个字符串 printf():输出格式化字符串 字符串去除 trim():去除字符串 ...

  6. PHP学习系列(1)——字符串处理函数(4)

    16.hebrevc() 函数把希伯来文本从右至左的流转换为左至右的流.它也会把新行 (\n) 转换为 <br />.只有 224 至 251 之间的 ASCII 字符,以及标点符号受到影 ...

  7. Postgresql 字符串操作函数

    样例测试: update property set memorial_no = btrim(memorial_no, ' ') where memorial_no like ' %' 或:update ...

  8. Postgresql数据库的一些字符串操作函数

    今天做项目遇到客户反映了一个麻烦的事情,有一些数据存在,但就是在程序中搜索不出来,后来分析,发现问题为数据前面有几个空白字符,后来用SQL查询了一下,发现八九个数据表中,数千万条数据中有将近三百万条数 ...

  9. js 字符串操作函数有哪些

    js 字符串操作函数有哪些 一.总结 一句话总结:js字符串函数都是字符串对象的方法,是通过调用字符串方法的方式调用,和java,php里面不一样. 1.字符串替换函数怎么用? 这里的正则表示是加双引 ...

随机推荐

  1. requests库下载图片的方法

    方法: 传入图片url,requests.get()方法请求一下,将源码以二进制的形式写在本地即可. 以前一直以为requests库中有特定的方法获取图片,类似urllib.request.urlre ...

  2. 爬虫技术实现空间相册采集器V.0.0.1版本

    一.    功能需求分析: 在很多时候我们需要做这样一个事情:我们想把我们QQ空间上的相册高清图像下载下来,怎么做?到网上找软件?答案是否定的,理由之一:网上很多软件不知有没有病毒,第二它有可能捆了很 ...

  3. Python之爬虫的理解

    #  -*- coding: utf-8 -*-  中文用户一定先用这行来声明编码方式 爬虫: 爬虫是自动访问互联网,并且提取数据的程序  (从网络上获取非结构化的数据,ETL将这些数据转换为结构化数 ...

  4. c++11の泛型算法

    一.泛型算法泛型算法这个概念是针对容器操作的,我们知道,c++11的顺序容器有vector,list,deque等,对于这些容器,c++11并没给出相应的增删改查方法,而是定义了一组泛型算法 一般的泛 ...

  5. springboot 定时任务

    1.启动类新增注解 @EnableScheduling import org.springframework.boot.SpringApplication; import org.springfram ...

  6. Git clone远程目录443:Timed out 问题(go get)

    现象: 在cmd中用go get -u github.com/kataras/iris   ,提示:443:Timed out 于是在 git bash 中   git clone https://g ...

  7. 使用.net core构建分布式SAAS系统(目录)

    一 前言 二 项目背景 三 项目架构-从单体应用到微服务 四 大数据量下的分库分表 五 缓存处理--进程内缓存与Redis的使用 六 使用MNS队列来流量削峰 七 百万Job的任务调度系统 八 每天1 ...

  8. .NET和PHP程序员如何通过技术快速变现

    刚开始写博客不足之处望大家多多指点,少一些质疑多一些帮助,我们就能成为朋友. 上一篇:<.NET程序员我是如何通过一个产品在2年内买车买房>有很多同为程序员的小伙伴们给我留言,从整体的留言 ...

  9. Python_if

    if if c语言中的if语句格式如下: if (条件) { 结果} python的格式与其不同,定义了自己的格式,更加的简明: if 条件 : 结果 print(111) if 3 > 2: ...

  10. [转帖]EXPDP dumpfile和parallel的关系

    http://blog.itpub.net/28602568/viewspace-2133375/ 转帖 EXPDP 里面 parallel 与 dumpfile 里面的文件数的关系. 但是我这里有一 ...