# -*- coding: utf-8 -*-
"""
A test to show the difference between filter and genrator expressionAs I believe, generator expression will delay the evaluation of the expression behind if测试filter与generator expression的区别
根据下面的测试结果,我推测生成式表达式(generator expression)会对if表达式推迟赋值"""def _odd_iter():n = 1while True:n = n + 2yield ndef _not_divisible(n):return lambda x: x % n > 0# 下面四种写法,只有第一种是正确的,其他写法primes0,primes1,primes2,都不会正确筛掉非质数。
def primes():yield 2it = _odd_iter() # 初始序列while True:n = next(it) # 返回序列的第一个数yield nit = filter(_not_divisible(n), it) # 因为为了完成_not_divisible的调用,n的值已经传进来了。
#据我理解,这个结果是        ...filter((lambda x: x % 7 >0), filter((lambda x: x % 5 >0), filter((lambda x: x % 3 >0),  _odd_iter())))def primes0():yield 2it = _odd_iter() # 初始序列while True:n = next(it) # 返回序列的第一个数yield nit = filter((lambda x: x % n >0), it) # 此时n的值未传进来;传进来的是n这个变量
#据我理解,这个结果是        ...filter((lambda x: x % n >0), filter((lambda x: x % n >0), filter((lambda x: x % n >0),  _odd_iter())))def primes1():yield 2it = _odd_iter() # 初始序列while True:n = next(it) # 返回序列的第一个数yield nit = (item for item in it if _not_divisible(n)(item)) # generator这种写法可能把 if 后面的运算都延迟了?
#据我理解,从最后结果反推出,这个结果是        ...(item for item in (item for item in (item for item in _odd_iter() if _not_divisible(n)(item)) if _not_divisible(n)(item)) if _not_divisible(n)(item))
#这里并没有把n的值代进去,而是保留了对n的引用,
#如果我的理解是对的,那么filter跟generator expression是不一样的,generator expression对if后面的表达式是延迟计算的。def primes2():yield 2it = _odd_iter() # 初始序列while True:n = next(it) # 返回序列的第一个数yield nit = (item for item in it if (lambda x: x % n > 0)(item)) # 结果同primes1
################ test output
print("output by primes:")
for n in primes():if n < 20:print(n)else:break
print("output by primes0:")
for n in primes0():if n < 20:print(n)else:break
print("output by primes1:")
for n in primes1():if n < 20:print(n)else:break
print("output by primes2:")
for n in primes2():if n < 20:print(n)else:break 

基于廖雪峰python 3教程里的讨论:

http://www.liaoxuefeng.com/discuss/001409195742008d822b26cf3de46aea14f2b7378a1ba91000/001480687071611fab98c8f381a4b63a1a94132134c432d000?page=1

14:49:47 2016-12-03

转载于:https://www.cnblogs.com/w3chan/p/6128760.html

Python 3. 里filter与generator expression的区别相关推荐

  1. 详解Python中的生成器表达式(generator expression)

    生成器表达式(generator expression)也叫生成器推导式或生成器解析式,用法与列表推导式非常相似,在形式上生成器推导式使用圆括号(parentheses)作为定界符,而不是列表推导式所 ...

  2. Python reduce / map / filter 函数区别 - Python零基础入门教程

    目录 一.map 函数 二.reduce 函数 三.filter 函数 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 Pyth ...

  3. Python函数里的爱情故事

    Python语言的学习中,有很多有意思的事件,本文就像大家展示了Python函数里的爱情故事,告诉大家其实编程还能这么去用,希望对大家的学习Python语言有所帮助 一直被拒型 def my_love ...

  4. python 数据分析里axis=0/1 行列定义为什么每次都不同?(比如pandas, numpy, DataFrame)

    在numpy中, axis=0表示按列操作, axis=1表示按行操作 [20190819 作者注] 作者看了之后, 表示对以上结论表示怀疑 参考文章1: python数据分析里axis=0/1 行列 ...

  5. python语言里数字包括_4.1Python语言中的数字、字符串数据类型讲解

    标准数据类型 Python3 中有六个标准的数据类型: int bool float complex(复数) Number(数字) String(字符串) List(列表) Tuple(元组) Set ...

  6. python thrift 进行filter

    python thrift 进行filter 介于我百度的时候发现文档比较少 就写一下防止忘记 SingleColumnValueFilter('<family>', '<quali ...

  7. python中类里self_Python类中的self到底是干啥的

    Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的 ...

  8. [转载] 当心掉进Python多重继承里的坑

    参考链接: Python多重继承 关于类的知识点里面,有一块是关于多重继承,跟其他主流语言一样,Python也支持多重继承,多重继承虽然有一些好处,但是坑很多,我们今天就来聊一聊Python多重继承里 ...

  9. python:实现median filter中值滤波器算法(附完整源码)

    python:实现median filter中值滤波器算法 from cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey from ...

最新文章

  1. 多个网站共享一个mysql数据库_如何在多个Postgresql数据库之间共享表
  2. 理解 Activity.runOnUiThread
  3. 如何在C++中调用python程序?
  4. c语言理解参数,c语言中对可变参数列表的简单理解
  5. 吴恩达机器学习笔记(三) —— Regularization正则化
  6. cascade sqlite 数据库_ON DELETE CASCADE无法正常工作在ios中的sqlite3中
  7. 分享我工作10年收藏的程序员技术网站
  8. oracle11gasm,oracle11gASM管理
  9. python解释器的工作原理_Python GIL全局解释器锁详解(深度剖析)
  10. Leetcode--215. 数组中第K个最大元素
  11. 开发库比较(3) - Mobile Web 开发 - Sencha, jquerymobiel, phonejs, jqtouch, jqmobi
  12. php 5.5 preg replace,解决ecshop在php5.5以上环境preg_replace报错方法
  13. 蛋白质分子动力学模拟
  14. java视频通话_Java使用WebSocket和WebRTC视频通话
  15. ueditor java_编辑器ueditor1.4.3 JAVA环境使用
  16. SylixOS之OK6410开发板系统烧写
  17. 正交试验设计例题及答案_【正交试验设计法是】试验设计与分析试题及答案
  18. NR PRACH(二)PRACH Format及频域位置
  19. 《OnlineChat996》基于微信群聊的在线实时通信工具
  20. python--爬虫scrapy框架

热门文章

  1. Win7登录时出现Group policy client 未启动无法登陆问题的解决方法
  2. httpclient的post请求超时
  3. 设计模式-模板方法模式(15)
  4. MySQL数据库(九) 一一 处理重复和SQL注入
  5. EVENT:10218 dump uba of applied undo
  6. “霸王级”寒潮来袭 通信业紧急部署确保网络安全
  7. Sublime一些问题以及解决方法
  8. 从短信类到短信平台之设计篇
  9. 用hosts屏蔽不想打开的或者恶意的网站
  10. 面试题 03.05. 栈排序