Python说话里面有一些小的坑,特别随意弄混弄错,初学者若不注意的话,很随意坑进去,下面我给大师深切解析一些这几个坑,希望对初学者有所辅佐.
1.i+=1 不便是++i
初学者对Python说话不是特别体味的话,又恰好有c++,java的说话背景,很随意把++i和i+=1弄混
先来看一个小例子:
i=0
mylist=[1,2,3,4,5,6]
while i<len(mylist):< p="" style="box-sizing: border-box;">
print(mylist[i])
++i
这段代码会想固然的认为,没有啥问题啊,一个轮回输出,i不竭的+1,蛮对的呀.其实不是的,这个代码会不息输出1,一个死轮回.由于Python的诠释器会将++i把持为+(+i).其中+表示是负数符号,对付--i也是近似的.
print(+1)
>>>1
print(++1)
>>>1
print(+++1)
>>>1
这下明白了++i虽然在Python语法是合法的,可是并不是我们理解的自增的把持.
2.分清楚==和is的用法
在断定字符串是否相称的时辰,初学者特别会弄混is和==,如许的成效是轨范在不合的情形下默示不合:
比如先看一个简单的例子:
a='Hi'
b='Hi'
print(a is b)
>>>True
print(a==b)
>>>True #看起来is和==仿佛是一样的
我们再看第二个例子:
str1='Wo shi yi ge chi huo'
str2='Wo shi yi ge chi huo'
print(str1 is str2)
>>>False#is的成效是False
print(str1==str2)
>>>True #==的成效为True,看二者不一样了吧
第三个例子
str3='string'
str4=''.join(['s','t','r','i','n','g'])
print(str3)
>>>string
print(str3 is str4)
>>>False #is的成效是False
print(str3==str4)
>>>True #==的成效为True,看二者不一样了吧
这就是很随意同化初学者的地方,感受很奇异,为什么有的时辰is和==输出不异,有的时辰不合呢.好我们来一探现实:
我们用内置的id()这函数,这个函数用来前往工具的内存地点,查一下就清楚了
文章插图
is是工具的标示符,用来斗劲两个工具的内存空间是不是一样,是不是用的统一块空间地点,而==是斗劲两个工具的内容是否相称.
3.毗连字符串特别是大规模的字符串,更好用join 而不是+
字符串措置的时辰,最常用的是毗连,Python中的字符串与其他的说话有一点不合,它是不成变工具,一旦建树不能改变.而这个特征直接会影响到Python中字符串毗连的服从.
用+毗连字符串:
str1,str2,str3='test','string','connection'
print(str1+str2+str3)
>>>test string connection
用join毗连字符串
str1,str2,str3='test ','string ','connection'
print(''.join([str1,str2,str3]))
>>>test string connection
可是若是毗连大规模的字符串,比如要毗连10万摆布的字符串的时辰,join的编制服从就会快良多(甚至相差百倍).比如下面这10万个字符串毗连.
long_str_list=['This is a long string' for n in range(1,100000)]
缘故缘由是由于若要毗连字符串:S1+S2+S3+....+SN,由于字符串是不成变的工具,实行一次就要申请一块新的内存,如许的话在N个字符串毗连的过程中,会产生N-1个中心成效,每产生一个中心成效就要申请一次内存,如许会严峻影响实行服从.
而join不一样,它是一次性申请总的内存,然后把字符串里面的每一个元素复制到内存中去,所以join会快良多.
是以,字符串的毗连,尤其是大的字符串措置,更好用join
4.不要在for 和while 轮回后面写else 块
Python 供给了一种良多编程说话都不支撑的功能,那就是可以在轮回内部的语句块后面直接编写else 块 。比如:
for i in range(3):
print('Loop %d'%i)
else:
print('Else block')
>>>Loop 0
>>>Loop 1
>>>Loop 2
>>>Else block
这种else 块会在整个轮回实行完之后马上运转 。既然如斯,那它为什么叫做else 呢?为什么不叫and ?在if/else 语句中,else 的意思是:若是不实行前面阿谁if 块,那就实行else 块 。
同理try/except/else 也是如斯,该构造的else 的寄义是:若是前面的try 块没有失败,那就实行else 块 。
try/finally 同样很是直不雅观不雅观,这里的finally 的意思是:实行过前面的try 块之后,不管若何老是实行finally块 。
问题来了对付刚接触Python 的轨范员可能会把for/else 构造中的else 块理解为:若是轮回没有正常实行完,那就实行else 块 。
实际上刚好相反——在轮回里用break语句提早跳出,会导致轨范不实行else 块,这一点会有点绕.对付不熟悉for/else 的人来说,会令阅读代码的人感应相称费解.
推荐阅读
- 忘记密保没有绑定手机怎么申诉QQ号码,微信密码忘记了,没绑定手机号个QQ号,邮箱也不记得,怎么办?
- 如何查看宽带账号密码,怎么查看自己家里的宽带帐号和密码?
- 取款密码忘了怎么重置 银行卡密码忘记了怎么办找回密码
- 缓解压力的音乐在线听 缓解压力的音乐
- 彬彬有礼的拼音 礼的拼音
- 摩斯密码表怎么敲视频 摩斯密码表怎么敲
- 换手机号了微信怎么办密码忘了 换手机号了微信怎么办
- 摩斯密码是什么意思 摩斯密码是什么?
- 53什么意思爱情数字密码大全 518什么意思爱情数字密码大全
- 微信支付有初始密码吗 微信支付初始密码什么意思