andor / and & or


对于and和or,可以连接多个值,其分别遵循原则:

  1. 全是 And: 返回第一个遇到的无效值,若全有效,返回最后一个有效值
  2. 全是 Or: 返回第一个遇到的有效值,若全无效,返回最后一个无效值
  3. 混用 And & Or: 优先所有 and 进行计算,随后计算所有 or,计算规则同上。
 print(1 and 0 and 2)    #
print(1 and 2 and 3) #
print(0 or 1 or 0) #
print(0 or '' or None) # None
# Equal to (1 and 0) or (3 and 2 and 4) or (None and 5)
print(1 and 0 or 3 and 2 and 4 or None and 5) #

可以利用这些特性进行一些狡猾的处理,例如print出有效内容,内容无效则显示自定义的字符串。

可参考下面的代码

 """
The return of 'and' and 'or'
As for 'or', it will return the first valid one, if all invalid, return the last invalid one
As for 'and', it will return the first invalid one, if all valid, return the last valid one
"""
class Foo(): pass def foo(): pass valid = [7, True, (7,), [7], {'': 7}, foo, Foo]
invalid = [0, None, False, '', (), [], {}] # 'or': Invalid or Valid --> return the first valid one
print('----Below is Invalid or Valid----')
for iv in invalid:
print(iv or 'Valid' or 'Real') # 'or': Invalid or Invalid --> return the last invalid one
print('----Below is Invalid or Invalid----')
for iv in invalid:
print(iv or None or False) # 'or': Valid or Valid --> return the first valid one
print('----Below is Valid or Valid----')
for vl in valid:
print(vl or 'Valid') # 'and': Invalid and Valid --> return the first invalid one
print('----Below is Invalid and Valid----')
for iv in invalid:
print(iv and 'Valid' and 'Real') # 'and': Valid and Valid --> return the last valid one
print('----Below is Valid and Valid----')
for vl in valid:
print(vl and 7 and True) # 'and': Valid or Invalid --> return the first invalid one
print('----Below is Valid and Invalid----')
for vl in valid:
print(vl and None and False) print('----Below is tricky print----')
# We can use it to make a tricky print
for iv in invalid:
print('I have %s' % (iv or 'None'))
for vl in valid:
print('I have %s' % (vl or 'None'))

和输出结果

----Below is Invalid or Valid----
Valid
Valid
Valid
Valid
Valid
Valid
Valid
----Below is Invalid or Invalid----
False
False
False
False
False
False
False
----Below is Valid or Valid----
7
True
(7,)
[7]
{'': 7}
<function foo at 0x02F7F930>
<class '__main__.Foo'>
----Below is Invalid and Valid----
0
None
False ()
[]
{}
----Below is Valid and Valid----
True
True
True
True
True
True
True
----Below is Valid and Invalid----
None
None
None
None
None
None
None
----Below is tricky print----
I have None
I have None
I have None
I have None
I have None
I have None
I have None
I have 7
I have True
I have 7
I have [7]
I have {'': 7}
I have <function foo at 0x02F7F930>
I have <class '__main__.Foo'>

Python_Tips[4] -> and 和 or 的计算原则的更多相关文章

  1. haier周的计算原则

    现使用oracle的sql表示出haier周, 经过对其生成结果的分析,发现海尔周是以周日到周六分别作为一周的始末, 用到的oracle sql中会涉及到calendar week的定义,还涉及到了I ...

  2. </2017><2018>

    >>> Blog 随笔原始文档及源代码 -> github: https://github.com/StackLike/Python_Note >>> 统计信 ...

  3. access-list/eigrp等 反掩码计算

    access-list/eigrp等 反掩码计算 原则:地址部分,相同的照写,不同的写"0"     反掩码部分,相同的写"0",不同的写"1&quo ...

  4. 【2019云栖大会】这一场,我们好好聊聊5G和边缘计算

    一年一度的科技盛会杭州云栖大会Apsara Conference就要来了9月25-27日数万名开发者将齐聚杭州云栖小镇共同探索人类科技演进的脉搏聚焦面向未来的创新.热点技术话题 5G和边缘计算是201 ...

  5. 阿里云杨敬宇:5G时代,边缘计算将发挥更大价值

    “5G时代,边缘计算将发挥更大价值.”3月8日,阿里云边缘计算技术负责人杨敬宇向媒体表示,边缘计算作为5G时代的一项关键技术,未来将成为不可或缺的基础设施之一. 5G时代万物智联将真正成为现实,但对计 ...

  6. 从备考PMP到与项目经理同呼吸

    前言 PMP是什么梗? 项目管理专业人士资格认证.它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证 ...

  7. Hadoop学习笔记—4.初识MapReduce

    一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算.对于大数据量的计算,通常采用的处理手法就是并行计算.但对许多开发者来 ...

  8. [Hadoop] Hadoop学习笔记之Hadoop基础

    1 Hadoop是什么? Google公司发表了两篇论文:一篇论文是“The Google File System”,介绍如何实现分布式地存储海量数据:另一篇论文是“Mapreduce:Simplif ...

  9. JS逻辑运算符&&与||的短路运算

    最近看到一个360面试题,题目如下: 下面代码的输出值是? alert(1&&2); 正确的结果是 2. 1.后来仔细研究了一下JS逻辑运算的相关内容,在MDN上面找到相应描述: 下面 ...

随机推荐

  1. atomic integer 实现

    public final int getAndAddInt(Object o, long offset, int delta) { int v; do { v = getIntVolatile(o, ...

  2. shell脚本递归删除空文件夹

    有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的脚本,于是自己动手写了一个 脚本 #!/bin/bash # author: 十年后的卢哥哥(http://www.cnblogs.com/ ...

  3. 给vmstat加上时间戳

    vmstat -n 5 | awk '{print strftime("[%Y-%m-%d %H:%M:%S]"),$0}' 或者 vmstat -n 5 | awk '{ pri ...

  4. Code Blocks中配置OpenGL方法

    关于在Code Blocks中配置OpenGL的方法,在网上一直没有找到实用的方法,后来在马龙师兄的帮助下终于配置成功了,现把配置过程记录如下. (1)下载codeblocks,最好是带mingw的版 ...

  5. 1020 Tree Traversals (25 分)(二叉树的遍历)

    给出一个棵二叉树的后序遍历和中序遍历,求二叉树的层序遍历 #include<bits/stdc++.h> using namespace std; ; int in[N]; int pos ...

  6. DAO设计模式的理解

    为了降低耦合性,提出了DAO封装数据库操作的设计模式. 它可以实现业务逻辑与数据库访问相分离.相对来说,数据库是比较稳定的,其中DAO组件依赖于数据库系统,提供数据库访问的接口. 一般的DAO的封装由 ...

  7. ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 L: 大整数减法

    http://acm.ocrosoft.com/problem.php?cid=1316&pid=11 题目描述 求两个大的正整数相减的差.   输入 共2行,第1行是被减数a,第2行是减数b ...

  8. min_free_kbytes是内存最安全值的阈值,然后这个值是怎么影响到系统内存回收的呢?

    min_free_kbytes 内存域水印值:min_free_kbytes 当不设置的时候:sqrt(16M)=4k 4k*4 = 16k 设置内存水印值的函数是: 6792 /* 6793 * I ...

  9. [HNOI2015][bzoj4011] 落叶枫音 [拓扑DP]

    题面 传送门 思路 首先有一个结论(应该是有比较大的利用价值的): 有向无环图的生成外向树树个数等于所有入度非0的点的入度乘积 然后这道题里面,唯一不合拍的因素就是这里有一条可能成环的边 我们可以把这 ...

  10. Unity Shader-GodRay,体积光(BillBoard,Volume Shadow,Raidal Blur,Ray-Marching)

    好久没有更新博客了,经历了不少事情,好在最近回归了一点正轨,决定继续Unity Shader的学习之路.作为回归的第一篇,来玩一个比较酷炫的效果(当然废话也比较多),一般称之为GodRay(圣光),也 ...