Python中的expression和statement

今天使用Python时碰到了如下问题:
>>> a=0
>>> b=0
>>> x=0
>>> a+=1 if x==0 else b+=1
  File "<stdin>", line 1
    a+=1 if x==0 else b+=1
                        ^
SyntaxError: invalid syntax
>>> 

后来多次测试:

>>> a=1 if x==0 else b=1
  File "<stdin>", line 1
SyntaxError: can't assign to conditional expression
>>> a if x==0 else b=1
  File "<stdin>", line 1
SyntaxError: can't assign to conditional expression
>>> c = a if x==0 else b
>>> 

在stack overflow找到了类似问题,http://stackoverflow.com/questions/14474168/using-statements-on-either-side-of-a-python-ternary-conditional

怪我基础不扎实。还有expression和statement是什么?expression是表达式,就是加减乘除等各种运算符号联接起来 的式子
,statement是语句,如if语句,while,复制语句等。

好了,这个问题弄明白了。

第一个错误在expression中包含了statement,语法错误。第二个和第三个错误是因为三木运算是expression只能作为左值,这也说明了四是正确的。

在c中if(a--) 能正确执行,而python中if a-=1会报错,这也说明了python与c的不同。

python中还有两个函数exec和eval,这两个函数的参数都是str,但exec执行statement,而eval执行expression。

>>> exec('a=1')
>>> exec('a==1')
>>> eval('a=1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    a=1
     ^
SyntaxError: invalid syntax
>>> eval('a==1')
True
>>> 


如上例,exec也可执行expression,statement本就由expression组成,且exec没返回值。


eval就只能执行expression了,有返回值。

expression有返回值,statement没有返回值。

记住这次的教训,基础的东西不可忽视,最基础的东西可能就是以后项目中最难以解决的bug!




转载于:https://my.oschina.net/zpengseu/blog/544017

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值