imap 和 ifilter 与生成器推导式

发布于 2024-12-04 20:59:19 字数 49 浏览 2 评论 0原文

我对无关紧要的技术细节很好奇——两者在 python 的内部表示、性能等方面的差异。

I'm curious about the insignificant technical details -- differences between these two in python's internal representation, performance and stuff like that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╭ゆ眷念 2024-12-11 20:59:20

一般来说,不鼓励使用映射和过滤器,但如果您仅通过一个函数进行映射过滤,它们是有用的。但切勿将 map 或 filter 与 lambda 一起使用 考虑一下:

filter 或 map 更好的地方:

(i for i in iterable if i), filter(bool, i)
(int(i) for i in iterable), map(int, i)

看,它们更简单。但是,请考虑这一点:

(i+3 for i in iterable), map(lambda i: i+3, iterable)
(i for i in iterable if i.isdigit()), filter(lambda i, i.isdigit(), iterable)

生成器表达式的一个优点是,您可以混合映射和过滤功能。

(f(i) for i in iterable if g(i)), map(f, filter(g, iterable))

对我来说,规则是:

  • 永远不要在映射或过滤器中使用 lambda。
  • 仅当您在做什么很明显时才使用地图或过滤器。
  • 对于其他一切,请使用生成器表达式。
  • 如果有疑问,请使用生成器表达式。

编辑:

忘记了一件重要的事情:

在 3 之前的 Python 版本上,map(和过滤器)是渴望的,所以最好将它与列表推导式进行比较。但在 Python 3 上,map 是惰性的,它的作用就像生成器表达式。

Generally, using map and filter is discouraged, but you are mapping-filtering by just one function, they are useful. But never use map or filter with lambda Consider this:

Places where filter or map is better:

(i for i in iterable if i), filter(bool, i)
(int(i) for i in iterable), map(int, i)

See, they are simplier. But, consider this:

(i+3 for i in iterable), map(lambda i: i+3, iterable)
(i for i in iterable if i.isdigit()), filter(lambda i, i.isdigit(), iterable)

And one advantage for generator expressions, you can mix map and filter functionality.

(f(i) for i in iterable if g(i)), map(f, filter(g, iterable))

For me the rules are:

  • Never use lambda in map or filter.
  • Only use map or filter if it's obvious what you are doing.
  • For everything else, use generator expressions.
  • If in doubt, use generator expressions.

Edit:

Forgot one important thing:

On Python versions older than 3, map(and filter) is eager, so it's better compare it with list comprehensions. But on Python 3, map is lazy, it acts like generator expressions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文