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'>

最新文章

  1. 我的.NET自学之路
  2. 关于base64编码的原理和实现
  3. android对象关系映射框架ormlite之一对多(OneToMany)
  4. Python连接MySQL数据库
  5. JS基础知识(作用域/垃圾管理)
  6. php发送get、post请求的几种方法
  7. 【BZOJ 3190】 3190: [JLOI2013]赛车 (半平面交)
  8. 一次mysql瘫痪解救
  9. SQL Server 连接和事务相关的问题。
  10. dropdown-toggle 的点击禁用
  11. 洛谷 P3038 [USACO11DEC]牧草种植Grass Planting(树链剖分)
  12. 从壹开始前后端分离[.netCore 不定期 ] 36 ║解决JWT自定义中间件授权过期问题
  13. 筛选出和该元素相交的元素之BoundingBoxIntersectsFilter
  14. Log4j 2使用教程一【入门】
  15. OnTriggerEnter2D方法
  16. node 安装 webpack
  17. 万恶之源 - Python开发规范
  18. 实验吧—隐写术——WP之 SB!SB!SB!
  19. VC 调试版(Debug Version)和发行版(Release Version)
  20. WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法。

热门文章

  1. 关于 Inno Setup 报木马的问题处理
  2. 对setTimeout函数的理解
  3. 每天一个Linux命令(9):cp命令
  4. Windows下如何解决git&#160;bash的默认home目录路径问题
  5. appium+python的APP自动化(1)
  6. 用Jenkins自动化搭建测试环境
  7. RAID介绍和实现
  8. php学习ing
  9. java连接Oracle数据库实现增删改查并在Navicat中显示
  10. C#类和类成员初始化顺序