一、问题起源:

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为假时,返回最后一个为假的值,(因为必须检测没有一个真值,才会确定返回结果)

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

三、结论:

python中的and与or相关推荐

  1. 如何优雅的在python中暂停死循环?

    死循环 有时候在工作中可能会遇到要一直执行某个功能的程序,这时候死循环就派上用途了,python中死循环的具体形式大致如下 while True:run_your_code() 结束死循环 通常我们结 ...

  2. 关于python中的dict和defaultdict

    dict 在Python中如果访问字典中不存在的键,会引发KeyError异常,所以一般当我们比如统计一句话的词频时候,我们总是使用这样的处理方式: strings = ('puppy', 'kitt ...

  3. python中的新式类与旧式类的一些基于descriptor的概念(上)

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  4. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  5. Python中正则表达式用法 重点格式以这个为准_首看_各种问题

    20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...

  6. 逗号分隔的字符串转换为Python中的列表 split

    将逗号分隔的字符串转换为Python中的列表 给定一个字符串: 它是由逗号分隔的几个值的序列: mStr = '192.168.1.1,192.168.1.2,192.168.1.3' 如何将字符串转 ...

  7. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

  8. 全面理解Python中的类型提示(Type Hints)

    众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...

  9. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  10. 通过带Flask的REST API在Python中部署PyTorch

    通过带Flask的REST API在Python中部署PyTorch 在本文中,将使用Flask来部署PyTorch模型,并用讲解用于模型推断的 REST API.特别是,将部署一个预训练的Dense ...

最新文章

  1. 关于Github(1)
  2. python3安装教程-Python3+Scapy安装使用教程
  3. sudo mount -o loop pm.img /mnt/floppy/mount 错误解决办法--mount 您必须指定文件系统的类型
  4. Leetcode 189. 旋转数组 (每日一题 20210909)
  5. 编码练习——Java-8-输入/输出
  6. 百度超级链XChain(6)XVM虚拟机
  7. MySql数据库连接池
  8. java foxmail 附件_foxmail 本程序使用JavaMail进行收取和发送带附件的邮件 - 下载 - 搜珍网...
  9. 【线性代数及其应用】04 -线性变换
  10. Class Not Found 的错误解决
  11. 【思维题】Bazinga
  12. mysql报错解决方式:1449 - The user specified as a definer (‘root‘@‘%‘) does not exist
  13. 工业设计公司如何进行家电设计创新?
  14. 台式计算机怎么进行打印机共享,台式机共享打印机的方法
  15. spring框架_03
  16. 游戏黑客圣经GHB1学习笔记 part1(1-5)
  17. 大话卷积神经网络CNN(干货满满)
  18. 常见的 ChatGPT 相关错误提示及解决办法
  19. [转] 治脚气;;咽痒咳嗽;睡眠磨牙;;绝招治痔疮;;乳汁不足方;;;打呼噜;;男人一周补肾食谱;; (百年难遇的好偏方)...
  20. ValueError: Shape of passed values is (10, 10000), indices imply (3, 10000)

热门文章

  1. python中数组的del,remove,pop区别详解
  2. 使用Python3进行AES加密和解密 输入的数据
  3. linux cp指令报错:cp: omitting directory ‘xxx‘(需要加-r递归拷贝)
  4. 【深度学习的数学】2-11 用Excel体验梯度下降法(用python实现)
  5. pycharm 怎么对代码进行性能分析,消耗时间time (Run -- Profile 'xxxx')
  6. Intel Realsense 官方案例源码地址
  7. Ubuntu系统下桌面卡死,但是鼠标键盘可以动
  8. PAT甲级题目翻译+答案 AcWing(树)
  9. Fireworks 期望,几何分布,概率,三分(2020.12.南京)
  10. 二叉树外部节点_leetcode 102 二叉树的层序遍历1 /BFS