Python 生成器表达式括号奇怪

发布于 2025-01-05 17:21:09 字数 388 浏览 2 评论 0原文

我想确定列表是否包含某个字符串,所以我使用生成器表达式,如下所示:

g = (s for s in myList if s == myString)
any(g)

当然我想内联它,所以我这样做:

any((s for s in myList if s == myString))

然后我认为使用单括号看起来会更好,所以我尝试:

any(s for s in myList if s == myString)

不真的很期待它能发挥作用。惊喜!确实如此!

那么这是合法的 Python 还是只是我的实现允许的?如果合法,那么这里的一般规则是什么?

I want to determine if a list contains a certain string, so I use a generator expression, like so:

g = (s for s in myList if s == myString)
any(g)

Of course I want to inline this, so I do:

any((s for s in myList if s == myString))

Then I think it would look nicer with single parens, so I try:

any(s for s in myList if s == myString)

not really expecting it work. Surprise! it does!

So is this legal Python or just something my implementation allows? If it's legal, what is the general rule here?

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

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

发布评论

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

评论(2

摘星┃星的人 2025-01-12 17:21:09

这是合法的,一般规则是生成器表达式确实需要括号。作为一个特殊的例外,函数调用中的括号也计数(对于仅具有单个参数的函数)。 (文档

请注意,测试 my_string 是否出现在 中 一样简单!

my_string in my_list

my_list 就像不需要生成器表达式或调用 any()

It is legal, and the general rule is that you do need parentheses around a generator expression. As a special exception, the parentheses from a function call also count (for functions with only a single parameter). (Documentation)

Note that testing if my_string appears in my_list is as easy as

my_string in my_list

No generator expression or call to any() needed!

万劫不复 2025-01-12 17:21:09

这是“合法的”,并且得到明确支持。一般规则是“((x)) 始终与 (x) 相同”(尽管 (x) 并不总是当然与 x 相同),并且将其应用于生成器表达式只是为了方便。

It's "legal", and expressly supported. The general rule is "((x)) is always the same as (x)" (even though (x) is not always the same as x of course,) and it's applied to generator expressions simply for convenience.

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