Python学习笔记-02-循环测试条件中易犯错的要点及配套解决方案
2018-03-22 15:46
295 查看
问题描述
在C语言以及Java等语言中,赋值运算会返回赋值后的值。但是,这一点在Python中不成立,Python赋值语句只是语句,不是表达式!Python严格区分以下概念:
表达式:比如 3 + 2 就是一个表达式,如果你在交互式环境下输入,会有回显 >>> 5,这就意味着,上面返回的值是5,顶层环境为我们自动打印表达式结果并显示,还有字符串格式化表达式等等
语 句:比如del L[0], 在Python2.6中print X,但是在Python3中print变成了一个内置函数,pass 空操作语句等等
错误示例
while ((x = next()) != NULL) {... process x ...}
上面书写的循环条件,是C语言中的常见写法,但是Python下会出错,不支持,因为x = next()赋值运算语句,不会返回赋值之后的x的值,从而想利用赋值之后的结果进行比较就无从谈起了!
解决方案
Python中至少存在以下三种常见的解决方案,都实现了不用在循环测试中嵌入赋值语句方法一:循环测试条件采用傻瓜式的True,再配合使用break语句
while True: x = next() if not x: break ...process x...
方法二:以x为循环测试条件,但是在进入循环之前将x赋值为True,而且不需使用break语句
x = True while x: x = next() if x: ...process x...
方法三:把赋值语句移到循环外,同样以x作为循环测试条件,同样不需要break语句了
x = next() while x: ...process x... x = next()
自我总结
经过上述的简短分析,我想大家肯定都明白了,其实注意到并且记住这个易混淆的点并不难,难在我们怎么能熟练记住并掌握上述三个常用的解决方案,要做到提笔就会,方才合格。因为第一种方案,采用傻瓜式的True作为循环测试条件,所以循环体中必定需要有if测试兼break语句,用以跳出循环!记住这一点,想必第一种方案定能熟稔于心~
第二种以及第三种方案皆采用x作为循环测试条件,但是二者在实现上仍有细微差别。第二种仍然可谓是简单粗暴,首先毫不客气的将 x 置为True,再以while x作为循环测试条件,赋值语句(x = next())放在循环内部,所以x为假时自然能退出循环,所以我们需要在处理x之前判断x是否为真,以确保对x的处理流程发生在x为真的条件下!
第三种其实算是大家最容易想到的了,既然Python不支持赋值语句返回赋值之后的值的这个feature,那好我就先在循环之前获取一次x的值(x = next()),所以进入循环之后,便开始 x 的处理流程,因为既然能进入循环,那么x必定为真!处理完之后,更新测试条件x的值,如此往复
相关文章推荐
- python 学习笔记之条件循环等语句
- python2.7学习笔记(4) ——条件判断、循环、dict、set
- Python学习笔记-第五章 条件、循环和其他语句(上)
- python 条件,循环和其他语句的学习笔记
- Python学习笔记-第五章 条件、循环和其他语句(下)
- python基础教程_学习笔记7:条件、循环、其它语句
- Python 2.7 学习笔记 条件与循环语句
- python学习笔记——循环语句条件语句
- python学习笔记(三)条件判断和循环
- python学习笔记之四:条件,循环和其他语句
- Python学习笔记:条件、循环
- Python基础教程 第5章: 条件、循环和其他语句 学习笔记
- Python学习笔记之条件、循环和其他语句
- Python学习笔记:条件、循环和其他语句
- Python学习笔记(五),条件,循环和其它语句(下)
- Python学习笔记五--条件和循环
- Python基础教程学习笔记----第五章 条件、循环和其他语句
- Python学习笔记(五)条件,循环和其他语句(上)
- Python 学习笔记 -- 条件判断、循环和异常处理
- python学习笔记-第2章节 分支,循环,还有条件