Python中不能在表达式中赋值是什么原因
小编给大家分享一下Python中不能在表达式中赋值是什么原因,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨方法吧!
为什么Python不能在表达式中赋值?
许多习惯于C或Perl的人抱怨,他们想要使用C 的这个特性:
while(line=readline(f)){//dosomethingwithline}
但在Python中被强制写成这样:
whileTrue:line=f.readline()ifnotline:break...#dosomethingwithline
不允许在 Python 表达式中赋值的原因是这些其他语言中常见的、很难发现的错误,是由这个结构引起的:
if(x=0){//errorhandling}else{//codethatonlyworksfornonzerox}
错误是一个简单的错字:x = 0,将0赋给变量x,而比较x == 0肯定是可以预期的。
已经有许多替代方案提案。大多数是为了少打一些字的黑客方案,但使用任意或隐含的语法或关键词,并不符合语言变更提案的简单标准:它应该直观地向尚未被介绍到这一概念的人类读者提供正确的含义。
一个有趣的现象是,大多数有经验的Python程序员都认识到while True的习惯用法,也不太在意是否能在表达式构造中赋值; 只有新人表达了强烈的愿望希望将其添加到语言中。
有一种替代的拼写方式看起来很有吸引力,但通常不如"while True"解决方案可靠:
line=f.readline()whileline:...#dosomethingwithline...line=f.readline()
问题在于,如果你改变主意(例如你想把它改成sys.stdin.readline()),如何知道下一行。你必须记住改变程序中的两个地方 -- 第二次出现隐藏在循环的底部。
最好的方法是使用迭代器,这样能通过for语句来循环遍历对象。例如 file objects 支持迭代器协议,因此可以简单地写成:
forlineinf:...#dosomethingwithline...
看完了这篇文章,相信你对Python中不能在表达式中赋值是什么原因有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。