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

  • 相关阅读:
    动态网页技术--JSP(5)
    动态网页技术--JSP(4)
    动态网页技术--JSP(3)
    动态网页技术--JSP(2)
    动态网页技术--JSP(1)
    动态网页技术--Servlet
    TomCat服务器搭建
    06_多线程
    05_进程间通信 IPC
    04_进程池
  • 原文地址:https://www.cnblogs.com/vonkimi/p/6858997.html
Copyright © 2011-2022 走看看