在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。

一、and:

>>> 'a' and 'b'
'b'
>>> '' and 'b'
''
>>> 'a' and 'b' and 'c'
'c'

在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。

如果布尔上下文中的某个值为假,则 and 返回第一个假值

二、or:

>>> 'a' or 'b'
'a'
>>> '' or 'b'
'b'
>>> '' or [] or {}
{}
>>> 0 or 'a' or 'c'
'a'

使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值

如果所有的值都为假,or 返回最后一个假值

注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值

三、and-or:

and-or 结合了前面的两种语法,推理即可。

>>> a='first'
>>> b='second'
>>> 1 and a or b
'first'
>>> (1 and a) or b
'first'
>>> 0 and a or b
'second'
>>> (0 and a) or b
'second'
>>>

这个语法看起来类似于 C 语言中的 bool ? a : b 表达式。整个表达式从左到右进行演算,所以先进行 and 表达式的演算。 1 and ‘first’ 演算值为 ‘first’,然后 ‘first’ or ‘second’ 的演算值为 ‘first’。

0 and ‘first’ 演算值为 False,然后 0 or ‘second’ 演算值为 ‘second’。

and-or主要是用来模仿 三目运算符 bool?a:b的,即当表达式bool为真,则取a否则取b。

and-or 技巧,bool and a or b 表达式,当 a 在布尔上下文中的值为假时,不会像 C 语言表达式 bool ? a : b 那样工作。

四、安全使用and-or

>>> a=""
>>> b="second"
>>> (1 and [a] or [b])
['']
>>> (1 and [a] or [b])[0]
''
>>>

由于 [a] 是一个非空列表,所以它决不会为假。即使 a 是 0 或者 ‘’ 或者其它假值,列表 [a] 也为真,因为它有一个元素。

一个负责的程序员应该将 and-or 技巧封装成一个函数:

def choose(bool,a,b):return (bool and [a] or [b])[0]
print  choose(1,'','second')    #''

深入分析python的and or 返回值相关推荐

  1. python a or b 输出值为_深入分析python的and or 返回值

    转自:Python中文社区 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一. 一.and: >>> ...

  2. 不显示参数名_第51p,万能参数与返回值,Python中函数的返回值

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第51篇文章,第三阶段的课程:Python进阶知识:详细讲解Python中的函数(四)====>函数的参数与返回值(下篇). ...

  3. C++调用python并获取其返回值

    C++调用python并获取其返回值 先上实例代码: C++代码: //初始化py环境 // Py_Initialize();PyRun_SimpleString("import sys&q ...

  4. 使用java运行Python脚本并获取返回值

    java运行Python脚本并获取返回值 java运行Python脚本并获取返回值 使用runtime类实现在java中运行Python脚本,话不多说,直接上代码 java运行Python脚本并获取返 ...

  5. 站长在线Python精讲:Python中函数的返回值

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中函数的返回值>.本文的主要内容有:函数的返回值的含义.函数设置返回值的作用.return语句位置与多条 ret ...

  6. Python函数常见return返回值类型

    Python函数常见return返回值类型Python函数return返回值类型主要包括: class 'int', class 'str', class 'tuple', class 'list', ...

  7. python中return的理解-Python return语句 函数返回值

    return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...

  8. python 调用控制台并获取返回结果_Java调用Python脚本并获取返回值

    在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在 ...

  9. Python | 基于参数和返回值的功能分类

    There are following types of the functions based on their parameters and return values: 根据函数的参数和返回值, ...

最新文章

  1. C#是否该支持“try/catch/else”语法
  2. 【html、CSS、javascript-8】JavaScript作用域
  3. mac环境下的linux光标快捷键
  4. 【机器学习】机器学习中必知必会的 8 种降维技术,最后一款超硬核!
  5. mysql双主 绿色_mysql (双主,互主)
  6. Android 数据访问之Internal Storage 数据保存在内存 demo+笔记
  7. SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)
  8. Atitit 研发体系建立 数据存储与数据知识点体系知识图谱attilax 总结
  9. 程序员数学(0)--序言
  10. 关于Linux下载工具
  11. postsql时间计算
  12. IE实现PDF在线预览功能
  13. [受限玻尔兹曼机] 原理、求解过程推导、深度信念网络
  14. nvidia驱动,cuda与cudnn的关系
  15. 汽车以太网芯片IP的功能安全验证和优化
  16. python接入支付宝
  17. Vue CLI3不兼容IE11打开空白报错SCRIPT1003: 缺少 ‘:‘
  18. 百度云盘上传显示服务器异常,百度网盘常见问题之网络异常,这里有最全面的解决方法...
  19. 【设计模式】之适配器(Adapter)
  20. “北美之鹰”试图借助Windows 10物联网核心版打破世界陆地速度记录

热门文章

  1. Spring MVC请求处理流程
  2. java-逻辑运算符
  3. Horizon组件安装详解 - 远程连接OpenStack服务
  4. 201521123011 《Java程序设计》第8周学习总结
  5. java 保护内存操作的方法
  6. 怎么拦截触摸事件IOS
  7. matlab 思维数组_如何在Matlab中保存多维数组?
  8. Java黑皮书课后题第4章:*4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声明
  9. android 高级项目,从零开始的Android新项目8 - Data Binding高级篇
  10. 80m的mysql文件要导入多久_mysql导入数据库文件最大限制更改解决方法:You probably tried to upload too large file...