zoukankan      html  css  js  c++  java
  • Python中AND-OR的用法

    学习Python中的lambda函数的时候,才发现原来Python中的AND和OR还可以有一些别的用法。Python中的布尔逻辑计算的结果并非返回布尔值,而是返回它们相互之间的某一个。文章的部分例子来源于Dive Into Python。

    AND

    AND的表达式返回所遇到的第一个假值,如果表达式中无假值,则返回表达式中最后一个值。在Python中,0、‘’、[]、()、None这五个值在布尔环境中为假,例子如下:

    >>>() and 'foo'
    ()
    >>>'python' and 'foo' and 'lambda'
    'lambda'
    

    第一个表达式中,()为假,所以表达式从左到右计算,返回第一个假值。而第二个表达式中,并没有假值,所以返回最后一个真值。

    OR

    OR的表达式和And表达式一样也是从左到右的计算,计算的结果为所遇到的第一个真值,如果表达式无真值,就返回表达式最后一个假值。例子如下:

    >>>'' or 'python'
    'python'
    >>>'' or () or {}
    {}
    

    第一个表达式中,从左到右计算,'python'字符串为第一个真值,返回它。第二个表达式中,所以个值都为假,返回最后一个假。  

     

     AND-OR 技巧

    Python中可以使用AND-OR来模拟C中的bool ? a : b 的表达式。先看个例子:

    >>>a = 'first'
    >>>b = 'second'
    >>>1 and a or b
    'first'
    >>>0 and a or b
    'second'
    

    这样使用AND-OR就可以达到了bool ? a : b的要求。但其中有个问题,假如a值为假值得话,最后的结果就不是我们想要的了。

    >>>a = ''
    >>>b = 'second'
    >>>1 and a or b
    'second'
    

    a为假,所以 1 and a 为 '',''和'second'计算的结果为'second'。其实我们可以利用下面的技巧来安全的使用AND-OR。

    >>> a = ""
    >>> b = "second"
    >>> (1 and [a] or [b])[0]
    

    通过使用非空列表的方式,防止a和b为假值。这样就达到目的了啊!有的时候我们可以将这样的用法和lambda表达式结合在一起用,比如下面这个表达式:

    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
    

    这是一个lambda函数,假如collapse为真,则将s中所有的空白去除,假如为假的话,则保留这些空白。

  • 相关阅读:
    Python3.5.2官方文档学习备忘录
    Linux下升级python版本
    役物,役于物
    各种编辑器添加注释快捷键
    Python3爬取百度百科(配合PHP)
    Python3向网页POST数据
    Python3爬取中文网址
    Python3批量爬取网页图片
    django中间件
    django创建上下文
  • 原文地址:https://www.cnblogs.com/cleverxy/p/3284184.html
Copyright © 2011-2022 走看看