Python学习笔记-02-循环测试条件中易犯错的要点及配套解决方案

问题描述

在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的值,如此往复

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值