广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件专业 > Python专业 > 正文

为什么不能在表达式中赋值?

作者:张荣德发布时间:2022-11-25分类:Python专业浏览:478


导读:许多习惯于C或Perl的人抱怨,他们想要使用C的这个特性:while (line = readline(f)) {// ...

许多习惯于 C 或 Perl 的人抱怨,他们想要使用 C 的这个特性:

while (line = readline(f)) {// do something with line}

但在 Python 中被强制写成这样:

while True:line = f.readline()if not line:break...  # do something with line

不允许在 Python 表达式中赋值的原因是这些其他语言中常见的、很难发现的错误,是由这个结构引起的:

if (x = 0) {// error handling}else {// code that only works for nonzero x}

错误是一个简单的错字:x = 0 ,将 0 赋给变量 x ,而比较 x == 0 肯定是可以预期的。
已经有许多替代方案提案。大多数是为了少打一些字的黑客方案,但使用任意或隐含的语法或关键词,并不符合语言变更提案的简单标准:它应该直观地向尚未被介绍到这一概念的人类读者提供正确的含义。
一个有趣的现象是,大多数有经验的 Python 程序员都认识到 while True 的习惯用法,也不太在意是否能在表达式构造中赋值; 只有新人表达了强烈的愿望希望将其添加到语言中。
有一种替代的拼写方式看起来很有吸引力,但通常不如"while True"解决方案可靠:

line = f.readline()while line:...  # do something with line...line = f.readline()

问题在于,如果你改变主意(例如你想把它改成 sys.stdin.readline() ),如何知道下一行。你必须记住改变程序中的两个地方 -- 第二次出现隐藏在循环的底部。
最好的方法是使用迭代器,这样能通过 for 语句来循环遍历对象。例如 file objects 支持迭代器协议,因此可以简单地写成:

for line in f:...  # do something with line...




Python专业排行
标签列表
网站分类
文章归档
最近发表