zoukankan      html  css  js  c++  java
  • filter

    看到一个比较有趣的程序

    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()

  • 相关阅读:
    数据结构-线性表-链表
    [poj 2991]Crane[线段树表示向量之和,而非数量]
    vector要注意的点
    vector与deque的区别
    sendfile复习
    GPU和CPU的区别
    常用Linux命令 mount df dd
    可省略的关键字
    父类与子类的virtual
    加快编译的技巧 & mount及tmpfs
  • 原文地址:https://www.cnblogs.com/vonkimi/p/6858997.html
Copyright © 2011-2022 走看看