zoukankan      html  css  js  c++  java
  • Python的三目运算符

    Python中的and/or

     

    在Python中,可以通过and,or和not进行逻辑运算,下面就来看看and和or的简单介绍。

    逻辑与-and

    对于包含and运算的表达式,Python解释器将从左到右扫描,返回第一个为假的表达式值,无假值则返回最后一个表达式值

    下面看一个使用and的例子:

    复制代码
    # if all the expressions are true, return the last expression
    print {"name": "Will"} and "hello" and 1
    
    # return the first false expression
    print {"name": "Will"} and "" and 1
    print {"name": "Will"} and [] and 1
    print {} and [] and None
    print {"name": "Will"} and [1] and None
    复制代码

    代码的输出为下:

    逻辑或-or

    对于包含or运算的表达式,Python解释器将从左到右扫描,返回第一个为真的表达式值,无真值则返回最后一个表达式值

    看下面的例子:

    复制代码
    # if all the expressions are false, return the last expression
    print {} or [] or None
    
    # return the first true expression
    print {"name": "Will"} or "hello" or 1
    print {} or [1] or 1
    print {} or [] or "hello"
    复制代码

    代码的输出如下:

    三目运算符

    很多语言中都支持三目运算符"bool?a:b",虽然在Python中不支持三目运算符,但是可以通过and-or达到同样的效果。

    expression_1 and expression_2 or expression_3

    看代码:

    a = "hello"
    b = "will"
    
    # bool?a:b
    print True and a or b
    print False and a or b

    这个例子通过and-or模拟了三目运算符,当第一个表达式expression_1为True的时候,整个表达式的值就是expression_2表达式的值:

    安全的and-or

    其实上面使用and-or模拟三目运算符的方式并不安全,看下图:

    如果expression_2本身的值就是False,那么无论expression_1的值是什么,"expression_1 and expression_2 or expression_3"的结果都会是expression_3。

    可以通过简单的代码就行验证:

    a = []
    b = "will"
    
    # bool?a:b
    print True and a or b
    print False and a or b

    代码输出为:

    那么为了避免这种问题,可以使用下面的方法,将expression_2和expression_3存放在list中:

    (expression_1 and [expression_2] or [expression_3])[0]

    例如:

    a = []
    b = "will"
    
    # bool?a:b
    print (True and [a] or [b])[0]
    print (False and [a] or [b])[0]

    代码的运行效果为下,即使expression_2为False,但是[expression_2]仍是非空列表:

    总结

    本文通过一些简单的例子,演示了Python中and和or的使用。

    并通过and-or方式实现了三目运算符的效果。  

    出处:http://www.cnblogs.com/wilber2013/

  • 相关阅读:
    《哈佛商业评论》2018正刊12期与增刊25期的点评
    《财经》2018年共30+1期的点评与摘抄
    4星|《人人都在说谎》:社会科学方面有趣的数据分析方法与结论
    3星|侯世达《我是个怪圈》:关于人类意识的各种哲学思辨
    虚拟机 SUSE Linux Enterprise Server 12 SP2 64
    虚拟机 CentOS7 64
    虚拟机 ubuntu 16.04
    虚拟机 windows xp sp3 原版
    C#实现控制Windows系统关机、重启和注销的方法
    日期时间设置 "2018-05-04T16:36:23.6341371+08:00" 格式
  • 原文地址:https://www.cnblogs.com/Mango886/p/14009637.html
Copyright © 2011-2022 走看看