zoukankan      html  css  js  c++  java
  • python中的and与or

    一、问题起源:

    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

  • 相关阅读:
    Burp-Intruder的四种枚举方式
    360众测
    PHP_Code_Challenge-15-file_get/put_contents
    PHP_Code_Challenge-14-文件包含+php伪协议利用
    PHP_Code_Challenge-10-进制转换绕过弱类型比较
    PHP_Code_Challenge-8-无数字字母的webshell
    PHP_Code_Challenge-7-$$变量覆盖
    转发一位师傅的思考及经验&也是对自己的提醒
    PHP_Code_Challenge-6-SQL注入&Union
    三月反思四月计划
  • 原文地址:https://www.cnblogs.com/sanqiansi/p/10135862.html
Copyright © 2011-2022 走看看