Python新手们容易犯的几个错误总结


Posted in Python onApril 01, 2017

前言

这篇文章主要给大家总结了关于学习Python的新手们容易犯的几个错误,一共四个易犯错误,下面来看看详细的介绍吧。

一、i+=1 不等于++i

初学者对Python语言不是特别了解的话,又正好有c++,java的语言背景,很容易把++i和i+=1弄混

先来看一个小例子:

i=0
mylist=[1,2,3,4,5,6]
while i <len(mylist):
 print(mylist[i])
 ++i

这段代码会想当然的认为,没有啥问题啊,一个循环输出,i不断的+1,蛮对的呀.其实不是的,这个代码会一直输出1,一个死循环.因为Python的解释器会将++i操作为+(+i) .其中+表示是正数符号,对于--i也是类似的.

print(+1)
>>>1
print(++1)
>>>1
print(+++1)
>>>1

这下明白了++i虽然在Python语法是合法的,但是并不是我们理解的自增的操作.

二、分清楚==和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()这函数,这个函数用来返回对象的内存地址,查一下就清楚了

Python新手们容易犯的几个错误总结

is是对象的标示符,用来比较两个对象的内存空间是不是一样,是不是用的同一块空间地址,而==是比较两个对象的内容是否相等.

三、连接字符串特别是大规模的字符串,最好用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

四、不要在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 的人来说,会令阅读代码的人感到相当费解.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python下如何让web元素的生成更简单的分析
Jul 17 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
Python语言实现将图片转化为html页面
Dec 06 Python
详解Python 协程的详细用法使用和例子
Jun 15 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
关于Python核心框架tornado的异步协程的2种方法详解
Aug 28 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
Python进程池Pool应用实例分析
Nov 27 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
pandas中pd.groupby()的用法详解
Jun 16 Python
深入解答关于Python的11道基本面试题
Apr 01 #Python
教大家玩转Python字符串处理的七种技巧
Mar 31 #Python
Python中你应该知道的一些内置函数
Mar 31 #Python
python 性能优化方法小结
Mar 31 #Python
Python+Selenium自动化实现分页(pagination)处理
Mar 31 #Python
pygame加载中文名mp3文件出现error
Mar 31 #Python
Python自动发邮件脚本
Mar 31 #Python
You might like
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
python tkinter界面居中显示的方法
2018/10/11 Python
pandas 层次化索引的实现方法
2019/07/06 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
党员实事承诺书
2014/03/26 职场文书
学生党员公开承诺书
2014/05/28 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
班主任工作实习计划
2015/01/16 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
P站美图推荐——变身女主角特辑
2022/03/20 日漫