在python中,语句和表达式是不一样的。语句不能出现在应该是表达式的位置。最典型的例子莫过于赋值语句出现在了表达式的位置,然后就会导致语法错误。 赋值语句出现在循环条件表达式处
>>> i = 1
>>> while i = 3:
File "<stdin>", line 1
while i = 3:
^
SyntaxError: invalid syntax
赋值语句出现在函数调用的参数中
>>> i = ...
>>> print(i=3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'i' is an invalid keyword argument for print()
>>> def fun(num): # 定义函数fun
... print(num)
...
>>> a = ...
>>> fun(a=3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() got an unexpected keyword argument 'a'
C语言的赋值表达式会返回一个值,但是python的赋值语句不会返回值。 因此,在C语言中,下面的代码是常见的操作。
#include<stdio.h>
int main()
{
int num;
printf("%d\n",num=100);
return 0;
}
而同样行为的代码在python中是不可行的。
>>> num = ...
>>> print(num=100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'num' is an invalid keyword argument for print()
由于python的赋值是语句,不是表达式,从而消除了一个在C语言中很容易犯的错误。
int i = 0;
if (i = 10) //i == 10被写成了i = 10
{
//do something
}
这个错误在C语言中是相当隐蔽的,一旦出现了这种错误,可能会导致你花费大量的时间来调试程序,以消除该bug。所以在C语言中,应该时刻谨记,涉及==运算符的时候,把常量写在左边,由于不能给常量赋值,可以避免一部分可能写错的代码。但是无法避免两个变量使用==比较的时候写错的可能。
python中,下面的写法都会报错
>>> i = 1
>>> if i = 2:
File "<stdin>", line 1
if i = 2:
^
SyntaxError: invalid syntax
>>> i,j = 1,2
>>> if i = j:
File "<stdin>", line 1
if i = j:
^
SyntaxError: invalid syntax