看到一个比较有趣的程序

def not_empty(s):

  return s and s.strip()

print(list(filter(not_empty, ['A', '', 'B', 'C ',None, ' '])))

结果是['A', 'B', 'C ']

这里的函数我本来自己写成如下:

def not_empty(s):

  return s.strip()

报错,提示None没有strip这个属性,所以第一个代码段中用到了return s and s.strip(),连顺序都不能变,否则还是会出错

这里解释一下:

Python中and是从左到右计算,若所有值为真,则返回最后一个值,若存在假,则返回第一个假值,所以正常情况下

1、'A'进入filter之后,先计算s='A'为真,再计算s.strip()为真,所以返回s.strip()='A'

这是一个真值,所以'A'成功筛选了

2、''进入filter之后,先计算s=''为假,所以返回s=''

这是一个假值,所以''筛选失败

3、'C '进入filter之后,先计算s='C '为真,再计算s.strip()='C'为真,所以返回s.strip()='C'

这是一个真值,所以'C '成功筛选

4、None进入filter之后,先计算s=None为假,所以返回s=None

这是一个假值,所以None筛选失败

如果使用s.strip() and s,就会报错提示None没有strip()

优质内容筛选与推荐>>
1、nasm汇编讲解
2、倒计时,用于限时优惠
3、Python数据挖掘——数据预处理
4、Qt 绘图设备
5、C++11多线程std::thread创建方式


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号