2011-02-25 152 views
2

复合运算符印(),而这个代码使用与蟒蛇

x = 11 
x += 5 
print(x) 

这是为什么下面的代码不蟒蛇工作

x = 11 
print(x += 5) 

+0

因为语言设计者不希望它。请参阅python的禅宗以了解对语言的期望:http://www.python.org/dev/peps/pep-0020/ – Benson 2011-02-25 09:32:17

回答

8

问题是由于语句和表达式之间的差异。 This question has an excellent answer which explains the difference,关键点之中:

表达:东西将计算得到一个值。示例:1 + 2/x

声明:一行代码,它执行某些操作。例如:GOTO 100

print声明需要打印输出的值。所以在括号里面放一个表达式给它打印价值。所以这可以像x那样简单或者像"The value is %d" % x这样更复杂的表达式。

x += 5是一个语句,它增加了5到x,但它不会返回值为print使用。

所以在Python你不能说

print(x += 5) 

任何比你更可以说:

y = x += 5 

然而,在其他一些语言,语句也表达式,即它们做一些返回一个值。例如,您可以在Perl中执行此操作:

$x = 5; 
$y = $x += 5; 
print $y; 

您是否希望这样做是另一个问题。

一个强制执行的Python语句和表达式之间的区别的好处是,避免常见错误的地方,而不是像这样:

if (myvar = 1) { 
    //do things 
} 

if (myvar == 1) { 
    //do things 
} 

你的错误以下

在第二种情况下,C会将myvar设置为1,但是Python会因编译错误而失败,因为您有一个声明,您应该有一个表达式。

+0

我认为这是在C/C++中作为序列点已知的,对吗? – 2011-02-25 11:25:24

+0

呵呵,在python中没有这样的编译错误,它们都是运行时错误:-) – 2011-02-25 12:14:48

+1

@Phobia:不正确。整个模块在第一条语句执行之前编译。文件中任何地方的语法错误都会阻止编译,所以模块根本不会运行。 – ncoghlan 2011-02-26 16:07:41

1

在Python中,函数调用只接受表达式,而不是语句。

任何与它相等的东西都是一个陈述。

这是同样的原因,你不能做的:

if x += 5: 
    print x 

见的Python语言参考(3.2 version2.7 version)的全部细节。

+0

也有同样的原因,您不能执行'print(x = 5 )'。 – Benson 2011-02-25 09:31:20

8

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

我假设你习惯于C语言,其中x + = 5是一个表达式,但是在Python中它不是。

+0

是的,我是一个Java程序员 – 2011-02-25 09:32:25