一、问题起源:

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

最新文章

  1. javascript星级评分(多个)
  2. 使用MJRefresh遇到的一个问题,上拉刷新后tableview瞬间滑到最底部
  3. DATETIME类型和BIGINT 类型互相转换
  4. MySQL数据类型和常用字段属性总结
  5. MongoDB学习笔记-数据库命令
  6. css中常用的几种居中方法
  7. jQuery ui 中文日历
  8. Android实例-路径信息及文件和文件夹的操作(XE8+小米2)
  9. Java write And read Demo
  10. 桂电在线-转变成bootstrap版
  11. ScrollView自动滑到底部
  12. Spring 的优秀工具类盘点第 2 部分
  13. C# 窗体程序入门 之计算器
  14. undefined reference to `sin'问题解决
  15. Blog`s CSS
  16. 用python3读CSV文件,出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid con
  17. maven snapshot和release版本的区别
  18. windows下安装Erlang
  19. BZOJ2223[Coci 2009]PATULJCI——主席树
  20. GDOI2018 Day1 题目总结

热门文章

  1. Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端
  2. Python实用笔记 (14)函数式编程——匿名函数
  3. CListBOX 用法
  4. .NET Core WEB API接口参数模型绑定
  5. 去除List集合中的重复值(四种好用的方法)(基本数据类型可用)
  6. 半导体质量管理(LineWorks)_SPACE(统计过程分析和控制环境)
  7. 一.前后端分离及drf实现序列化的原理
  8. sublime 搜索时忽略文件夹
  9. 基本数据类型--------------------集合set()
  10. 【转】Web端测试点整理