栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python 2 vs Python 3-过滤器行为的差异

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 2 vs Python 3-过滤器行为的差异

这里有两个部分起作用:

  • 在python-3.x中,它
    filter
    用作生成器:过滤是延迟完成的;和
  • i
    lambda x : ...
    更新,以及在
    i
    for
    环,使进展。

因此,最后构建的内容类似于:

l = filter(lambda x: x == 5 or x % 5 != 0,        filter(lambda x: x == 5 or x % 5 != 0, filter(lambda x: x == 5 or x % 5 != 0,     filter(lambda x: x == 5 or x % 5 != 0,l) )        )    )

请注意,
所有过滤操作似乎

i
一直
5
都在进行
。因此,现在您调用
tuple(..)
,将完成实际的过滤,并且您将看到过滤出的不是五个主题的五个的倍数。

一个简单的解决方法是

list
在循环中使用,以便
filter
主动完成操作:

l = range(2, 20)for i in range(2, 6):    l = list(filter(lambda x: x == i or x % i != 0, l))print(tuple(l))

在python中运行此命令会返回:

>>> l = range(2, 20)>>> for i in range(2, 6):...     l = list(filter(lambda x: x == i or x % i != 0, l))... >>> print(l)[2, 3, 5, 7, 11, 13, 17, 19]

请注意,尽管python-2.7和python-3.x看起来完全一样,但它们实际上是互不兼容的“不同”语言:用一种语言编写的代码无法始终在另一种语言上运行,反之亦然。

另一个注意事项(贷记@ShadowRanger)是实际上 可以绑定

i
到您的lambda中。您可以通过创建“高阶lambda”来实现。而不是写:

lambda x : x == i or x % i != 0

你写:

(lambda j : (lambda x : x == j or x % j != 0))(i)

发生的事情是定义一个函数,该函数将a

j
实际取值为
i
。通过立即调用,
j
绑定到的值
i



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号