一、问题起源:

main=None

main=main or sys.modules["__main__"].main

main返回的是后面一个值,即 sys.modules["__main__"].main

和原先想的不同,来验证下

二、解决方案:

"and 优先级大于or 的证明"

print(2 or 1 and False)#2

"and 为假时必然返回假,规定返回第一个为假的值的证明,因为只要检测一个为假就能确定返回结果了,这样成本最低"

print(None and 0)#None

print(0 and None)#0

print(1 and 0)#0

print(0 and 1)#0

"and 为真时必然返回真,规定返回最后一个为真的值的证明,因为只有检测到最后一个为True时才能确定返回结果,返回最后一个成本最低"

print(1 and "ddd")#"ddd"

print("ddd" and 1)#1

"or 为真时返回真,规定返回第一个为真的值的证明,因为只要一个为真就可以确定返回结果了,直接返回检测到的真,成本最低"

#均为真时

print(1 or 2)#1

print(2 or 1)#2

"or均为假时返回假,规定返回最后一个为假的值的证明,因为必然确定所有值为假,直接返回最后一个假值,成本最低"

print(0 or None)#None

print(None or 0)#0

返回的值均是括号后面的内容;

证明的结论如下:

首先证明了and 与or返回的不是bool型,而是原值

然后证明了如下结论:

1.and 优先级大于or; and

2.and 为假时,返回第一个为假的值,(因为只要检测一个为假就能确定返回结果了)

3.and为真时,返回最后一个为真的值,(因为只有检测到最后一个为True时才能确定返回结果)

4.or为真时,返回第一个为真的值,(因为只要一个为真就可以确定返回结果了,直接返回检测到的值)

5.or为假时,返回最后一个为假的值,(因为必须检测没有一个真值,才会确定返回结果)

个人认为使用了成本最低理论,即返回确定最终结果的值

原文:https://blog.csdn.net/ningyanggege/article/details/81334984

python中的and与or的更多相关文章

  1. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  2. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

  3. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  4. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  5. python中的TypeError错误解决办法

    新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...

  6. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

  7. python2.7高级编程 笔记二(Python中的描述符)

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  8. python cookbook 学习系列(一) python中的装饰器

    简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...

  9. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

  10. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

随机推荐

  1. 并发04--JAVA中的锁

    1.Lock接口 Lock与Synchronized实现效果一致,通过获得锁.释放锁等操作来控制多个线程访问共享资源,但是Synchronized将获取锁固话,必须先获得锁,再执行,因此两者对比来说, ...

  2. JDK8--08:Optional

    在程序运行时,空指针异常应该是最常见的异常之一,因此JDK8提供了Optional来避免空指针异常. 首先说明JDK8新增的Optional及相关方法的使用 Optional的常用操作: Option ...

  3. cv2 exposureFusion (曝光融合)

    import cv2 import numpy as np import sys filenames = ['./images/memorial0061.jpg', './images/memoria ...

  4. 解决IE浏览器中点击按钮上传无效的问题

    前几天写了上传功能,点击按钮上传,在谷歌中是没有任何问题的: 但是在IE浏览器中点击没有任何效果 源代码如下:  后来发现在Firefox.IE浏览器中button标签内部可以含有其他标签,但是不能对 ...

  5. 消息总线(Bus)

    Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接.可以用于通知状态更改(例如配置更改)或其他管理指令.一个关键的地方是,Bus就像一个分布式执行器,用于扩展的Spring Boo ...

  6. linux系统,没有安装任何编辑器的情况,如何操作文件

    [清空文件] echo  " " > filename [添加内容] echo "123" >> filename

  7. Oracle查询dba_extents视图很慢

    Oracle查询dba_extents视图很慢 问题描述 下边这条SQL查询每次大概要花1分钟左右,实在是比较异常. select owner,tablespace_name from dba_ext ...

  8. www.215wd.com

    www.215wd.com 传奇销售系统 QQ:1479528000

  9. java 数据结构(十):Collection子接口:Set接口

    1. 存储的数据特点:无序的.不可重复的元素具体的: 以HashSet为例说明:1. 无序性:不等于随机性.存储的数据在底层数组中并非照数组索引的顺序添加,而是根据数据的哈希值决定的.2. 不可重复性 ...

  10. python技巧 namedtuple

    python的namedtuple可以创建一个带字段名的元祖和一个带名字的类 In [1]: from collections import namedtuple ...: ...: nginx=na ...