龙空技术网

为什么我不能在Python表达式中使用赋值?

小鸣同学 77

前言:

眼前看官们对“python的赋值语句不合法的”大约比较注意,大家都需要分析一些“python的赋值语句不合法的”的相关文章。那么小编也在网上收集了一些关于“python的赋值语句不合法的””的相关资讯,希望大家能喜欢,看官们一起来学习一下吧!

很多人习惯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}

该错误是一个简单的错字:,它将0赋值给变量,写入时比较肯定是预期的。x = 0xx == 0

已经提出了许多替代方案。大多数黑客可以节省一些打字量,但使用任意或隐含的语法或关键词,并且不符合语言改变建议的简单标准:它应直观地向尚未被引入构造的人类读者建议适当的含义。

一个有趣的现象是,大多数有经验的Python程序员认识到这个习惯用法,似乎并没有错过表达式中的赋值构造; 只有新人表达强烈的愿望,才能将其添加到语言中。while True

有另一种拼写方式,看起来很有吸引力,但通常不如“真正的”解决方案强壮:

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

这样做的问题是,如果您改变主意,确切知道如何获得下一行(例如,您想要更改它sys.stdin.readline()),则必须记住更改程序中的两个位置 - 第二个事件隐藏在循环。

最好的方法是使用迭代器,使得使用for语句循环对象成为可能。例如,在当前版本的Python文件对象中支持迭代器协议,因此您现在可以简单地编写:

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

标签: #python的赋值语句不合法的 #表达式是一个值因此不能作为赋值目标