在python中使用print()和复合运算符

Mah*_*sam 2 python compound-operator python-3.x

以下代码在python中不起作用

x = 11
print(x += 5)
Run Code Online (Sandbox Code Playgroud)

而这段代码确实如此

x = 11
x += 5
print(x)
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Roe*_*ven 8

x + = 5是一个语句,而不是表达式.您只能在函数调用中将表达式用作参数.

我假设你已经习惯了类C语言,其中x + = 5是一个表达式,但在Python中则不然.


Dav*_*ebb 8

问题是由于Statement和Expression之间的区别. 这个问题有一个很好的答案解释了差异,关键点是:

表达式:评估值的东西.示例:1 + 2/x

声明:执行某些操作的代码行.示例:GOTO 100

print声明需要打印出一个值.所以在括号中你放了一个表达式,给它打印的值.所以这可以是简单的事情,也可以是x更复杂的表达"The value is %d" % x.

x += 5是一个添加5的语句,x但它没有返回值print使用.

所以在Python中你不能说

print(x += 5)
Run Code Online (Sandbox Code Playgroud)

比你说的更多:

y = x += 5
Run Code Online (Sandbox Code Playgroud)

但是,在某些其他语言中,语句也是表达式,即它们执行某些操作返回值.例如,您可以在Perl中执行此操作:

$x = 5;
$y = $x += 5;
print $y;
Run Code Online (Sandbox Code Playgroud)

你是否愿意这样做是另一个问题.

在Python中强制执行语句和表达式之间差异的一个好处是,您可以避免常见的错误,而不是像:

if (myvar == 1) {
    //do things
}
Run Code Online (Sandbox Code Playgroud)

你有以下错误:

if (myvar = 1) {
    //do things
}
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,C将设置myvar为1但Python将因编译错误而失败,因为您有一个应该有表达式的语句.