zoukankan      html  css  js  c++  java
  • 【转】Python三目运算,and or陷阱

    在C语言中,三目运算经常用到(cond?a:b),非常的简洁,而在Python中不支持这种语法。
    但是,可以用Python中and or来实现(这里是有陷阱的,下面会讲到)
    我们来看下面几个表达式
    >>> False or 1
    1
    >>> False or 0
    0
    >>> True or 0
    True
    >>> True and 1
    1
    >>>True and 0
    0
    >>> False and 1
    False

    也就是说,and or这个表达式会返回一个最终的表达式结果,而不是简单的True或者False。那么看如下几个表达式:
    >>> True and 1 or 2   #TRUE?1:2
    1
    >>> False and 1 or 2 #TRUE?1:2
    2

    这是不是很像三目运算的结果呢?
    这里你也许会想到文章开始的三目表达式可以这样表示
    >>> cond and a or b

    是的,在大多数情况下这个表达式都是正确的,但是上面提到的陷阱也在这里出现了
    >>> cond, a, b = True, 0, 1 #这样赋值后
    >>> cond and a or b         #这个表达式的结果会是什么呢?
    1                                      #也就是b,而不是你预想的a

    这是因为,在 and or运算中 空字符串 ‘’,数字0,空列表[],空字典{},空(),None,在逻辑运算中都被当作假来处理,如下面这个例子
    >>> 'sss' and '' or 'bbb'
    'bbb'

    但是,不要担心,还是有办法的。
    在的文章《和C语言三目运算符完全等价的表达式》中给出了如下表达方式
    >>> c = cond and a or (not cond or a) or b #貌似有点太复杂了

    在Dive into Python 中给出这样一个方法:
    >>> (1 and [a] or [b])[0]   #也就是 (cond and [a] or [b])[0]

    所以用 (cond and [a] or [b])[0] 就好了

  • 相关阅读:
    redux和react-redux做简单组件控制
    store(转)
    react+redux开发详细步骤
    rudex 实现流程
    react eject 报错
    react生命周期
    python logging
    hihocoder 1754
    hihocoder_offer收割编程练习赛58
    内存检查
  • 原文地址:https://www.cnblogs.com/cyttina/p/3041885.html
Copyright © 2011-2022 走看看