文档章节

Python中的expression和statement

zpengseu
 zpengseu
发布于 2015/12/14 13:17
字数 403
阅读 1362
收藏 1
今天使用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!




© 著作权归作者所有

zpengseu
粉丝 0
博文 19
码字总数 6921
作品 0
南京
程序员
私信 提问
关于python指定字符编码的说明

要让python文件支持UTF-8输入和显示,我们熟悉在文件第二行加入如下注释: # -- coding: -- 但是为什么要这么写,到底写成什么格式是合法的,可以看下面这段说明: Defining the Encoding Py...

huang19830104
2018/06/28
0
0
notes on python

iterator Behind the scenes, the for statement calls iter() on the container object. The function returns an iterator object that defines the method next() which accesses element......

leo-H
2014/12/20
138
0
Python Tips, Tricks, and Hacks

一、快速技巧 1.1、4 种引号 ' ''' " """ print """I wish that I'd never heard him say, '''She said, "He said, 'Give me five dollars'"'''""" 1.2、对象/变量的真与假 my_object ...

大数据之路
2013/07/23
995
0
pycharm集成pylint-django

Pycharm集成pylint-django 1、安装pylint-django(如果在非django项目可以用pylint) 2、pycharm-External Tools设置 解释: --load-plugins pylint_django 这句是pylint-django的参数.用来loa......

_Change_
2018/09/10
392
0
Sphinx 2.0.2-beta 发布,全文检索引擎

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设...

红薯
2011/11/17
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

崛起于Springboot2.X之5分钟解决单点登陆(53)

SpringBoot2.X心法总纲 1、pom文件依赖 <dependency> <groupId>com.majiaxueyuan</groupId> <artifactId>sso-core</artifactId> <version>1.2.2</version></dependency> 2、......

木九天
12分钟前
13
0
面向对象和面向过程的区别

面向过程 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 缺点:没有面向对...

无名氏的程序员
14分钟前
10
0
OpenStack大事记

2010年7月19日,Rackspace、NASA、Citrix、Dell共同开发并发布OpenStack第一个版本。 2011年10月,Rackspace放弃OpenStack控制权,交由一新成立的OpenStack基金会管理。 2012年5月NASA宣布退...

大别阿郎
14分钟前
8
0
面向对象的简单应用—以交通工具(Vehicle)为列

请定义一个交通工具(Vehicle)的类其中有: 属性: 速度(speed)、 体积(size)等,方法:移动(move())、设置速度(setSpeed(int speed))、加速 speedUp()、减速 speedDown()等。最后在测试类 Ve...

INEVITABLE
25分钟前
7
0
通往艺术家之路

通往艺术家之路 并发编程中,开发者往往需要权衡锁的颗粒粗细,锁住的代码块太大呢会导致可能的线程堵塞,锁的颗粒太细呢又会因为频繁地加锁解锁导致系统用户态内核态的转换从而消费很多时间...

StupidZhe
26分钟前
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部