python字符串连接超过2个,用join代替+号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python字符串连接超过2个,用join代替+号相关的知识,希望对你有一定的参考价值。

python字符串连接效率问题


在python效率的讨论问题中字符串的连接效率有提过,多数建议使用join来代替"+"进行字符串连接

python中一切皆对象 字符串对象就是c api中得stringobject.c看python源码的objects文件可以找到

1."+"。使用加号连接2个字符串会调用静态函数string_concat(register PyStringObject *a ,register PyObject * b),在这个函数中会开辟一块大小是a+b的内存的和的存储单元,然后将a,b字符串拷贝进去,试想一下,如果是n个字符串相连  那么会开辟n-1次内存,是比较耗费资源的

2.对于使用join函数 "".join([a,b])   会调用string_join函数  会计算列表的长度  一次分配一块内存然后拷贝,所以n个字符串相连 开辟内存的次数是1次

所以如果只有2个相连效率区别不大  但是数据多了就会有问题

python与c语言在创建变量时候的不同

1。python有小整数缓冲池  PyIntObject就是一个对C语言中long类型的数值的扩展,出于性能考虑,对于小整数,Python使用小整数对象池small_ints缓存了[-5,257)之间的整数,该范围内的整数在Python系统中是共享的。  当定义一个整数a=3.然后删除这个整数使用b=3发现a,b的id是一样的 再使用 c = 12345执行上面的操作我们发现2个数的内存地址不一样  小整数缓冲池

2。python中定义一个字符串s = "hello",g = "hello"后 ,s,g的地址相同 ,c语言定义char a[5] = "hello",char b[5] = "hello" ,a和b的字符串地址不同 ,说明又申请了一块内存,python使用的interned机制 首先查询

>>> a="123"

>>> b="123"

>>> id(a)

46553808L

>>> id(b)

46553808L



>>> a=12345

>>> b=12345

>>> id(a)

47307928L

>>> id(b)

47307880L


小整数:

>>> a=256

>>> b=256

>>> id(a)

35165744L

>>> id(b)

35165744L


本文出自 “select” 博客,谢绝转载!

以上是关于python字符串连接超过2个,用join代替+号的主要内容,如果未能解决你的问题,请参考以下文章

Python连接字符串用join还是+

python之字符串连接

SQL Server ——用 join on 连接多个表

列表[‘hello’ , ‘python’ ,’!’ ] 用多种方法拼接,并输出’hello python !’ 以及join()在python中的用法简介

mysql中多表连接(不使用join )为啥 超过三张表就报错?

8种Python字符串拼接的方法,你知道几种?