zoukankan      html  css  js  c++  java
  • and和or的新用法

    原文链接

    在看《集体智慧编程》第九章,对从Facebook上爬来的数据进行分析时有这样一条语句让我很困惑。

        male1 = (data1['gender'] == 'Male') and 1 or 0
        male2 = (data2['gender'] == 'Male') and 1 or 0
    

    咋一看,有点晕,就上网查了下,现将查到的知识记录下来。

    • and的优先级要大于or
    • a and b语句的输出全看a的Boolean值,如果a为True,输出b;反之,如果a为False,输出a
    • a or b语句的输出也全看a的Boolean值,如果a为True,输出a;反之,如果a为False,输出b

    再把原因解释下:
    这条语句实际输出的是最后一个判断条件的值,and和or语句的判断都是从左至右的。
    即a and b会先判断a,如果a为True,则还需要判断b的Boolean值,不管b的Boolean值是什么,最后一个判断的是b,所以会输出b;反之,如果a为False,则不需要再判断b的Boolean值了,因为结果肯定为False,所以最后进行判断的就是a,也就是会输出a。
    而a or b也是会先判断a,如果a的Boolean值为True,则不需要再判断b的Boolean值了,因为结果肯定是True了,也就是会输出a;如果a的Boolean值为False,则就需要再去判断b的Boolean值,不管b的Boolean值为多少,最后进行判断的都是b,也就是输出就为b。
    光说不练假把式,就举几个例子看下:

    >>> 4 and 5
    5
    >>> 4 or 5
    4
    >>> 3 and 4 or 5
    4
    >>> 3 and (4 or 5)
    4
    >>> 3 or 4 and 5
    3
    >>> (3 or 4) and 5
    5
    >>>
    

    具体的推导过程就不说了,这个明白了后我们再看原来的语句就好理解了
    这两条语句的主要作用是将原数据集中的性别一项转换为1和0两个容易处理的int型数据,它们等价于:

        if(data['gender'] == 'Male'):
            male = 1
        else:
            male = 0
    

    本文来自博客园,作者:中州韵,转载请注明原文链接:https://www.cnblogs.com/zhongzhouyun/p/14975864.html

  • 相关阅读:
    Typora+PicGo图片上传教程
    创建一个springbootcloud项目
    plugin.xml 解析说明
    Java 元注解 使用示例
    Spring 注解学习 使用示例
    springboot2.2 集成 activity6 请假完整示例
    SpringBoot 过滤器,拦截器初步学习整理(有示例代码)
    mybatis plus mysql 代码生成器 示例demo
    Bootstrap相关方法,事件整理
    网站链接
  • 原文地址:https://www.cnblogs.com/zhongzhouyun/p/14975864.html
Copyright © 2011-2022 走看看