python 短路逻辑和条件表达式
2013-08-01 20:48
232 查看
布尔运算符有个有趣的特性:只有在需要求值时才进行求值。举例来说,表达式x and y需要两个变量都为真时才为真,所以如果x为假,表达式就会立刻返回false,而不管y的值(事实上各个语言都有这个特性)。实际上,如果x为假,表达式会返回x得值----否则它就返回y的值。这种行为被称为短路逻辑(short-circuit logic)或惰性求值(lazy evaluaion):布尔运算符通常被称为逻辑运算符,就像你看到的那样第2个值有时“被短路了”。这种行为对于or来说也同样适用。在表达式x or y中,x为真时,它直接返回x的值,否则返回y值。注意,这意味着在布尔运算符之后的所有代码都不会执行。
这有什么用呢?它主要是避免了无用地执行代码,可以作为一种技巧使用,假设用户应该输入他/她的名字,但也可以选择什么都不输入,这时可以使用默认值‘<unknown>’。可以使用if语句,但是可以很简洁的方式:
换句话说,如果raw_input语句的返回值为真(不是空字符串),那么它的值就会赋给name,否则将默认的'<unknown>'赋值给name。
这类短路逻辑可以用来实现C和Java中所谓的三元运算符(或条件运算符)。Python2.5中有一个内置的条件表达式,像下面这样:
如果b为真,返回a,否则,返回c。(注意,这个运算符不用引用临时变量,就可以直接使用,从而得到与raw_input例子中同样的结果。)
在python中,预定义为常量的False的布尔表达式、特殊对象None、空序列或集合(空字符串、列表、元组)、值为0 的数值型数据项等的布尔结果为False,其他为True。
这有什么用呢?它主要是避免了无用地执行代码,可以作为一种技巧使用,假设用户应该输入他/她的名字,但也可以选择什么都不输入,这时可以使用默认值‘<unknown>’。可以使用if语句,但是可以很简洁的方式:
name = raw_input('Please enter your name: ') or '<unknown>'
换句话说,如果raw_input语句的返回值为真(不是空字符串),那么它的值就会赋给name,否则将默认的'<unknown>'赋值给name。
这类短路逻辑可以用来实现C和Java中所谓的三元运算符(或条件运算符)。Python2.5中有一个内置的条件表达式,像下面这样:
a if b else c
如果b为真,返回a,否则,返回c。(注意,这个运算符不用引用临时变量,就可以直接使用,从而得到与raw_input例子中同样的结果。)
在python中,预定义为常量的False的布尔表达式、特殊对象None、空序列或集合(空字符串、列表、元组)、值为0 的数值型数据项等的布尔结果为False,其他为True。
相关文章推荐
- python 短路逻辑和条件表达式
- Python学习笔记之条件表达式
- 关系运算符和关系表达式,逻辑运算符和逻辑表达式,条件运算符和条件表达式,运算符的优先级
- java逻辑表达式短路分析
- 正则表达式笔记 4 分支条件 逻辑操作符 |
- 正则表达式笔记1 分支条件 逻辑操作符 |
- Python中的逻辑表达式and与or
- python条件表达式即三元运算符写法
- 【2】python-字符串+条件语句+逻辑语句+转义字符
- Python入门(七):生成列表、条件过滤、多层表达式
- 正则表达式的条件与分组的探索——基于python
- 从头认识Spring-1.15 对SpEl的值的操作(3)-逻辑运算以及条件表达式
- 零基础入门学习Python学习笔记第四讲【短路逻辑】
- 用短路表达式在语法层面上替代条件判断语句
- 关于逻辑表达式的“短路效应”
- NOI题解(1.4编程基础之逻辑表达式与条件分支)
- <Python进阶读书笔记>之(五) 条件表达式
- OpenJudge1.4编程基础之逻辑表达式与条件分支之 03:奇偶数判断
- Python学习入门基础教程(learning Python)--3.3 分支语句的条件表达式详解 .
- 关于python all(itrable)的使用 和列表表达式使用以及复习一下短路效应。