美文网首页我们就爱程序媛
python的and左右有玄机

python的and左右有玄机

作者: 予岁月以文明 | 来源:发表于2017-10-27 14:23 被阅读1次

    廖雪峰filter教程中有这么一段函数

    def not_empty(s):
        return s and s.strip()
    
    list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
    
    

    处理空字符,开始不理解为什么not_empty返回的不是布尔值,而是str。。。
    原来表示真假的不只有布尔值TRUE和false,空字符串,空字典,列表,数字0,none,都是FALSE。
    另外一点是,在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。如果布尔上下文中的某个值为假,则 and 返回第一个假值。

    >>> 'a' and 'b'
    'b'
    >>> '' and 'b'
    ''
    >>> 'a' and 'b' and 'c'
    'c'
    

    回到廖雪峰的例子,直接用lambda更简洁。

    print(list(filter(lambda x: x and x.strip(), ['A', '0','', 'B', None, 'C', '  '])))
    

    遇到第一个空字符串,and返回的是假,遇到多个空格,and返回的是真,而且返回右边的数值,也就是空格.strip(),结果又变成了空(假的),所以删除了。

    不过他的这个表达式如果遇到数字就完蛋了。我用正则修改了一下,不管数字还是其他都能处理掉。

    print(list(filter(lambda x: x and re.sub('\s','',x), ['A', '0','', 'B', None, 'C', '  ',0])))
    

    相关文章

      网友评论

        本文标题:python的and左右有玄机

        本文链接:https://www.haomeiwen.com/subject/ohgrpxtx.html