在python中使用字符串应该注意什么_python 连接字符串需要注意的细节

例如,我需要答应100行hello world,很简单的方法,就是

s = "hello world\n"

print s*100

当然有时候,不可能这么简单

s = "hello world\n"

for i in xrange(100): #do something

s += s

如果你这么去做了,后果就只有一个,死机

先看一个我测试的列子吧

importtime a = 'a'*10

b =time.time() for i in range(26): a +=a print time.time()-b #大约花掉35s

时间花掉35s,另外,电脑卡的不行了,内存消耗巨大,看起来很合理的逻辑,为什么会出现这种情况呢。我们看看a += a到底是做了那些事情

首先,a+a得到一个字符串,然后把字符串赋值给a变量,同时会把之前的a变量的回收掉,所以,现在的a和之前的a并不是同一个a

a = 'aaaaaaaaaa'

for i in range(10): printid(a) a += a

输出的是

3075497040

3075500944

3075461216

3075337504

3075516056

167898488

168231584

168232256

168269304

168271896

这种做法我接触过的语言都是这样处理的,简单的来说是通过拼接字符串后得到的新字符串,和原来的不是在同一个内存空间,那之前的就必须被回收掉。

for i in range(26):

a+= a

上面的例子会出现,不断的开辟新的内存空间,有不断的清理垃圾。java中就提供了一个StringBuffer的类,就是为了处理这种情况。

我们在编程的过程中当然不会出现这种情况,如果是这样的呢,从一个大文件里,需要把某些字符地换程另外的字符,写到另外的文件中,下面的代码很可能是一种选择

s = ''

for line in open('before.txt'): line = line.replace('xx','aa') s += line+'\n'

f = open('after.txt','w') f.write(s) f.close()

这个糟糕的情况就出现了

拼接字符串不在很多大牛写的程序种出现过吗,难道他们都用的不合理,不是的,这种方式只是在拼接的字符串较大,并且次数多的时候,会出现问题。

总结:有时候我们是倒在细节的脚下,因此不要小看它们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值