• Debug > python中的True False 0 1


    今天看了下python中的一些基础知识,以offer64为例叭!

    求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

    使用逻辑运算符的短路效应~

    Python(2或3)的运算的返回值是这样的:
    (1)如果多个变量均非0,那么返回最后一个变量的值。如3 and 2 and 'a'的返回值为'a';
    (2)如果多个变量中存在0值,且0值前无None,则返回第一个0值。如1 and 'a' and 0 and None的返回值为0。

    Python 中的 “1” 和 “True”  “0”和“False”:

    1. 两者“数值”相等   2. 但两者的ID不同

    【举个栗子】

    “is”和“==”的含义不同,“1”和“True”虽然数值相同,但是id不同。

    “is” 比较的是 ID :is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。

    “==” 比较的是 数值大小 :==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等。

    1.包含一个逻辑运算符

    首先从基本的概念着手,python中哪些对象会被当成 False 呢?而哪些又是 True 呢?

    在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了  __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,则其实例也被当作False,其他对象均为True。

    下面是最简单的逻辑运算: 这里 1,2 都是Ture; 0,"’都是False

    1 and 2 ==> 2 1or 2 ==> 1

    1 and 0 ==> 0 1 or 0 ==> 1

    0 and 1 ==> 0 0 or 1 ==> 1

    0 and ""==> 0 0 or "" ==> ""

    总结: 前提一个运算符的情况

    or 从左到右,返回第一个为真的值,都为假返回后一个值

    and 从左到右,若所有值均为真,则返回后一个值,有一个假的值,则返回第一个假的值

    2.包含两个及以上的逻辑运算符

    逻辑运算符 and / or 一旦不止一个,其运算规则的核心思想就是短路逻辑。

    好的,那我们就来了解一下短路思想:

    表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。

    表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。

    若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

    3.三元运算操作符 bool ? a : b ,若 bool 为真则 a ,否则为 b 。

    转化为 python 语言为:

    bool and a or b

    如何理解呢? 首先 a , b 都为真,这是默认的。如果 bool 为真, 则 bool and a 为真,输出 a ,短路 b 。如果 bool 为假,短路 a,直接 bool or b ,输出 b 。

    换一种更简单的写法:

    return a if bool else b

    【举个复杂的栗子】

    and 与 or 语句同时存在的情况:

    def a():
        print ("A")
        return[]
    def b():
        print ("B")
        return[]
    def c():
        print ("C")
        return 1
    
    def d():
        print ("D")
        return[]
    
    def e():
        print ("E")
        return 1
    
    def f():
        print ("F")
        return 1
    
    def g():
        print ("G")
        return[]
    
    def h():
        print ("H")
        return 1
    
    if a() and b() and c() and d() or e() and f() or g() and h():
        print ("ok")

    分析一下,从左至右,首先a() 的逻辑值为 False,其后到 or 语句为止有三个 and 语句: a() and b() and c() and d(),均被短路。只输出 a(), 得到 a() or e() 为True,输出 e() ,得 e() and F() 为 True ,输出 f(), 其后接 or 语句,则短路其后所有。最终只打印了A E F ok 。

  • 相关阅读:
    Android 常用开发类库
    Java 8 时间日期库的20个使用演示样例
    数据格式转换 (三)Office文档转HTML
    2011年读过的书及2012年即将要读的书
    nodeJs学习路线
    Android入门篇(一)Androidproject的搭建,导入与导出,图标的改动
    MySQL 使用自增ID主键和UUID 作为主键的优劣比較具体过程(从百万到千万表记录測试)
    实战Jquery(四)--标签页效果
    Xcode加入应用图标以及启动界面
    poj 2240 Bellman-Flod 求环
  • 原文地址:https://www.cnblogs.com/aluomengmengda/p/16039656.html
Copyright © 2020-2023  润新知