运算符中的短路行为and,or:

让我们首先定义一个有用的函数来确定是否执行某些操作。 一个接受参数的简单函数,打印一条消息并返回输入,不变。

>>> def fun(i):

... print "executed"

... return i

...

在下面的例子中,可以观察到Python的and,or运算符的短路行为:

>>> fun(1)

executed

1

>>> 1 or fun(1) # due to short-circuiting "executed" not printed

1

>>> 1 and fun(1) # fun(1) called and "executed" printed

executed

1

>>> 0 and fun(1) # due to short-circuiting "executed" not printed

0

注意:解释器认为以下值表示错误:

False None 0 "" () [] {}

功能中的短路行为:and,or:

Python的and和and函数也支持短路。 如文档中所示; 他们按顺序评估序列的每个元素,直到找到允许在评估中提前退出的结果。 请考虑以下示例来理解两者。

函数and检查是否有任何元素为True。 一旦遇到True,它就会停止执行并返回True。

>>> any(fun(i) for i in [1, 2, 3, 4]) # bool(1) = True

executed

True

>>> any(fun(i) for i in [0, 2, 3, 4])

executed # bool(0) = False

executed # bool(2) = True

True

>>> any(fun(i) for i in [0, 0, 3, 4])

executed

executed

executed

True

函数and检查所有元素是否为True并在遇到False时立即停止执行:

>>> all(fun(i) for i in [0, 0, 3, 4])

executed

False

>>> all(fun(i) for i in [1, 0, 3, 4])

executed

executed

False

链式比较中的短路行为:

另外,在Python中

比较可以任意链接; 例如,and相当于or,但y仅评估一次(但在两种情况下,当发现x < y为假时,根本不评估z)。

>>> 5 > 6 > fun(3) # same as: 5 > 6 and 6 > fun(3)

False # 5 > 6 is False so fun() not called and "executed" NOT printed

>>> 5 < 6 > fun(3) # 5 < 6 is True

executed # fun(3) called and "executed" printed

True

>>> 4 <= 6 > fun(7) # 4 <= 6 is True

executed # fun(3) called and "executed" printed

False

>>> 5 < fun(6) < 3 # only prints "executed" once

executed

False

>>> 5 < fun(6) and fun(6) < 3 # prints "executed" twice, because the second part executes it again

executed

executed

False

编辑:

另一个有趣的注意事项: - Python中的逻辑and,or运算符返回操作数的值而不是布尔值(''或name)。 例如:

操作''给出结果name

与其他语言不同, '',name C中的运算符返回0或1。

例子:

>>> 3 and 5 # Second operand evaluated and returned

5

>>> 3 and ()

()

>>> () and 5 # Second operand NOT evaluated as first operand () is false

() # so first operand returned

同样''运算符返回最左边的值为name == True其他最正确的值(根据短路行为),示例:

>>> 2 or 5 # left most operand bool(2) == True

2

>>> 0 or 5 # bool(0) == False and bool(5) == True

5

>>> 0 or ()

()

那么,这有用吗? 实践Python中给出的一个示例用法由Magnus Lie Hetland提供:

假设用户应该输入他或她的名字,但可以选择不输入任何内容,在这种情况下你想使用默认值''。你可以使用if语句,但你也可以非常简洁地陈述事情:

In [171]: name = raw_input('Enter Name: ') or ''

Enter Name:

In [172]: name

Out[172]: ''

换句话说,如果raw_input的返回值为true(不是空字符串),则将其分配给name(没有任何更改); 否则,默认''分配给name。

python短路与_Python支持短路吗?相关推荐

  1. python短路与_python的“短路”效应

    什么是python的短路效应(short circuit)呢? 看下面的代码: >>>True or False True python解释器解释执行代码的时候发现or左边的是Tru ...

  2. python的数据类型_Python支持哪些数据类型

    Python基本数据类型一般分为:数字.字符串.列表.元组.字典.集合这六种基本数据类型. 数字数字类型是不可更改的对象.对变量改变数字值就是生成/创建新的对象.Python支持多种数字类型: 整型( ...

  3. Python是否支持短路?

    本文翻译自:Does Python support short-circuiting? Python是否支持布尔表达式短路? #1楼 参考:https://stackoom.com/question/ ...

  4. python多线程编程_python多线程编程(1): python对多线程的支持

    前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支持. 虚拟机层面 Python虚拟机使用GIL(Global ...

  5. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

  6. python安装准备_Python安装准备

    Python的安装准备 python 荷兰人Guido van Rossum,2005年加入Google,2013年加入Dropbox 1989年,创立了Python语言,1991年初发布第一个公开发 ...

  7. python编写异常处理_Python 简明教程 --- 23,Python 异常处理

    要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语法错误和一些其它的运行时错误等. 逻辑错误: 这种错误不会导致程序崩溃,它不容易被发现,只有在执行结 ...

  8. python模块手册_python模块说明

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能, ...

  9. Edit Distance Python源码及支持包的实现

    Edit Distance Python源码及支持包的实现 编辑距离 编辑距离 又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance)指两个字串之间,由一个转成另一个所需的最少 ...

最新文章

  1. es6学习笔记8--Map数据结构
  2. 利用jQuery实现用户名片小动画
  3. -【Java FTP及FTP服务器搭建】
  4. phpstorm设置 打开文件所在目录_PDF文件在线分享并设置打开次数
  5. python excel token_python+excel接口自动化获取token并作为请求参数进行传参操作
  6. java中bean对象_JAVA中PO,BO,VO,DTO,POJO,Entity,JavaBean,JavaBeans各个对象的区别,以及lombo、jpa简介及用法...
  7. 应用开发框架之——业务规则脚本化
  8. c++访问数据库代码示例 occi_使用Python操作SQL Server数据库
  9. 每天一道Rust-LeetCode(2019-06-02)
  10. mysql tx read only_DB为何大量出现select @@session.tx_read_only 详解
  11. Linux系统的镜像文件iso下载地址
  12. word设置背景色为护眼的绿色
  13. 软件著作权 php代码行数,申报软件著作权时,如何快捷计算源码行数
  14. Android系统换字体不root,安卓手机更换字体简易方法(免ROOT)
  15. 计算机电脑为什么0无法输入,电脑浏览器网页无法输入文字该怎么办?
  16. type、dtype和astype
  17. 在知乎逮到一个腾讯10年老测试开发,聊过之后收益良多...
  18. 百度索引是什么如何增加索引
  19. Loadrunner11安装与破解详解 win7
  20. 关于arm上移植电阻屏支持qt的方法

热门文章

  1. 网络:简述对家庭宽带和专线(企业宽带)的认识
  2. 二年级课程表(3月28日-4月1日)
  3. Windowbuilder中Swing的数据绑定
  4. 帆软两台服务器文件同步,同步帆软代码
  5. [概念]PMP,项目管理
  6. FPGA解析B码----连载7(完结篇)
  7. Linux执行命令常用命令4.0
  8. 东方甄选、交个朋友迎头而上,云集不进则退
  9. 论文阅读 FastSpeech
  10. js实现移动端电子签名