转自:Python中文社区

在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') #’’

今年第六届大会PyConChina2016,由PyChina.org发起,CPyUG/TopGeek 等社区协办,将在2016年9月10日(上海)9月25日(深圳)10月15日(北京、杭州)地举办的针对Python开发者所举办的最盛大和权威的Python相关技术会议,由PyChina社区主办,致力于推动各类Python相关的技术在互联网、企业应用等领域的研发和应用。

您可以点击此处

了解更多详情,或者扫描下图二维码:

python a or b 输出值为_深入分析python的and or 返回值相关推荐

  1. python杨辉三角输出指定行_使用python打印十行杨辉三角过程详解

    如何用python输出杨辉三角 程序输出需要实现如下效果: [1] [1,1] [1,2,1] [1,3,3,1] .. 方法:迭代,生成器 12345678910111213141516171819 ...

  2. python装饰器原理wraps(method)(self)_理解Python中装饰器最佳方法~

    了解装饰器之前, 可以先了解一下什么是闭包的概念为好: 闭包, 是指在一个函数中定义了一个另外一个函数,内函数里运用了外函数的临时变量(实际参数也是临时变量),并且外函数的返回值是内函数的引用(一切皆 ...

  3. 实际开发问题解决记录: 需求是mysql执行查询 返回数据给前端 既要返回值不为NULL的列也要返回值为NULL的列(值为NULL的列列名返回给前端)

    一.查询值不为NULL 的列 我们先来看数据库所有数据 执行的sql语句:  select id,FCJ,comeCoalForecast from FCJ 查询结果如下: 看完执行查询所有数据的例子 ...

  4. 下列python语句的输出结果是_下列Python语句的输出结果是_______________。

    [判断题]All arguments have a conclusion. (10.0分) [单选题]在关于学校萌芽的传说中,有一种学校的名称是"庠",这个场所是( ) [单选题] ...

  5. 下列python语句的输出结果是_下列Python语句的输出结果是________________

    [填空题]在Python中一行书写两条语句时,语句之间可以使用__________作为分隔符. [填空题]Python语句序列"a,b=3,4; a,b=b,a; print(a,b) &q ...

  6. list python 访问 键值对_基础|Python常用知识点汇总(中)

    字符串字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串.1.创建字符串 str1 = 'Hello World!' str2 = "Hello W ...

  7. 用python怎么样实现图像二值化_使用Python+OpenCV如何实现图像二值化

    使用Python+OpenCV如何实现图像二值化 发布时间:2020-10-26 14:15:52 来源:亿速云 阅读:77 作者:蛋片鸡 这篇文章运用简单易懂的例子给大家介绍使用Python+Ope ...

  8. python 进行一元线性回归并输出相关结果_荐一元线性回归利用最小二乘法求解原理代码及案例...

    1.线性回归的原理 基础定义 线性回归是利用数理统计中的回归分析,来确定两种或两种以上属性间相互依赖的定量关系的一种统计分析方法.举个例子,一套房子的具有面积.卧室数量.卫生间数量等三个属性,该房子的 ...

  9. python中print函数输出是字符串_如何用python3输出print函数?

    最近函数讲的比较多,小编知道大家对函数的热情很高,所以趁热打铁想扩展一些知识内容.毕竟大家对print函数不算陌生,用的也算是频繁.不知道大家有没有学过输出print函数方面的知识,今天小编要带来的内 ...

最新文章

  1. MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现
  2. golang 命名规范和开发规范
  3. Objective-C:随机的读取文件中的内容
  4. 【LeetCode从零单排】No.160 Intersection of Two Linked Lists
  5. 对SetViewportOrg和SetWindowOrg的理解
  6. 收藏 | 49 个 Python 学习资源
  7. Django create和save方法
  8. 8个适合新手入门的python项目2020_8个适合新手入门的Python项目(2020.6)
  9. 2019.01.27【NOIP普及组】模拟赛C组总结
  10. *【HDU - 2586】How far away ? (LCA模板题,倍增)
  11. session和cookie的最深刻理解
  12. linux磁盘划分注意,划分磁盘阵列注意问题
  13. Spark Yarn Client模式双网卡-多hostname导致问题(阿里云)
  14. 2018-10-11
  15. 高通滤波器的电压传递函数_一次弄懂低通、高通、带通、带阻、状态可调滤波器!...
  16. arduino继电器控制风扇_Arduino 笔记 - Lab21 使用继电器控制12V风扇
  17. 题解-怪盗基德的滑翔翼 c++
  18. 计算机网络安全讲座心得,学习信息安全心得体会
  19. LNMP 平台的 redis 对接安装
  20. 如何购买云服务器及其配置

热门文章

  1. SQL vs NoSQL:异同比较
  2. Windows拷贝大文件
  3. (SAE)skylark app engine preview (1) —— guestbook
  4. 一个合格的ACMer的代码当中,都藏着哪些秘密?
  5. 人工智能方向改变,图灵测试是否已过时?
  6. 让 AI 训练 AI:揭秘阿里、浙大的 AI 训练师助手
  7. 几个 Python“小伎俩” | 内附代码
  8. 支付宝、微信回应3D面具破解人脸识别;ofo 否认「发币」;Kafka 2.4.0 发布 | 极客头条...
  9. 顶级开发人员最容易轻视的五大重要技能!
  10. 看完这篇,终于知道自己会不会 C# 泛型了!