python中的布尔操作

1. Python中的布尔值

  • Python中任何对象都有一个固定的布尔值,即非零、非空的对象为真,数字0、空对象和None为假
  • True和False为1和0的特殊显示形式
  • 布尔操作and、or会根据一定规则返回操作对象(下文详细解释)
  • 布尔运算会在结果确定的时候停止运算(短路)

2. Python中的布尔操作

  • and:全真为真,并返回第二个对象
  • or:有一真为真,返回第一个对象
  • not:返回True或者False

(1) and

  1. 真 and 真:返回第二个对象,因为只有第一个和第二个对象同时为真时才为真,即不会短路

  2. 真 and 假:返回第二个对象,即假

  3. 假 and 真:短路,直接返回第一个对象

  4. 假 and 假:短路,直接返回第一个对象

    >>> 1 and 2
    2
    >>> 1 and []
    []
    >>> [] and 1
    []
    >>> [] and ()
    []
    

(2) or

  1. 真 or 真:短路,直接返回第一个对象

  2. 真 or 假:短路,直接返回第一个对象

  3. 假 or 真:结果为真,返回第二个对象

  4. 假 or 假:结果为假,返回第二个对象

    >>> 1 or 2
    1
    >>> 1 or []
    1
    >>> [] or 1
    1
    >>> [] or {}
    {}
    

(3) not

not的操作比较简单,根据not后对象的真假,输出相反的True或者False

>>> not 1
False
>>> not 0
True
>>> not []
True

3.布尔运算的应用

(1) if/else 三元表达式

A = B if C else D

# 等效于:
if C:
    A = B
else:
    A = D

含义为:若C成立,A = B;否则 A = D

# Example
>>> A = 1 if True else 2
>>> A
1
>>> A = 1 if False else 2
>>> A
2

(2) 其他应用

  1. 从一个集合中选取非空的对象

    X = A or B or C or D or E
    # 若A非空则X = A,否则继续看B,若B非空则X = B...
    
  2. 指定默认值

    X = A or default
    # 若A非空则X = A,否则X为默认值
    
  3. 判断字符串是否为空

    # 常规写法:
    if X != '':
    	xxx
    
    # 简便写法:
    if X:
        xxx
    
  4. filter()函数配合bool()函数将列表中非空对象找出来

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

    ——以上内容摘自:菜鸟教程

    bool()函数可以返回对象的真假

    # Example 1:返回列表中的真对象
    >>> A = [1, 0, 'sss', [],()]
    >>> list(filter(bool, A))
    [1, 'sss']
    
    # Example 2: 返回列表中的假对象:借助lambda函数造一个not函数
    >>> A = [1, 0, 'sss', [],()]
    >>> list(filter(lambda x:0 if x else 1, A))
    [0, [], ()]
    
    # Example 3:【简化写法】借助列表推导返回列表中的真对象
    >>> A = [1, 0, 'sss', [],()]
    >>> B = [x for x in A if x]
    >>> B
    [1, 'sss']
    
    
  5. any()all()函数分别检测列表中是否存在或全部为真

    >>> A = [1, 0, 'sss', [],()]
    >>> any(A)
    True
    >>> all(A)
    False
    
    
posted @ 2020-04-09 22:04  海淀区小吴同学  阅读(940)  评论(0编辑  收藏  举报