gpt4 book ai didi

python - 带有 "next( c for c in l if )"的 python 语句的含义

转载 作者:行者123 更新时间:2023-11-28 21:39:16 24 4
gpt4 key购买 nike

在将一些 python 代码移植到 PHP 中时,我遇到了以下代码段的问题:

def getOrAdd(self, config):
h = config.hashCodeForConfigSet()
l = self.configLookup.get(h, None)
if l is not None:
r = next((c for c in l if config.equalsForConfigSet(c)), None)
if r is not None:
return r
if l is None:
l = [config]
self.configLookup[h] = l
else:
l.append(config)
return config

我想不通,那是什么线

r = next((c for c in l if config.equalsForConfigSet(c)), None)

确实意味着。

谁能解释一下这句话的意思吗?

提前致谢!

最佳答案

它结合了two-arg next (从迭代器中提取下一个值,如果迭代器耗尽,则返回第二个参数作为默认值)带有 generator expression ,这就像一个惰性的 list 理解(它产生一个迭代器/生成器,按需产生值)。

所以:

r = next((c for c in l if config.equalsForConfigSet(c)), None)

在英文中,意思是“获取 l 的第一个元素,该元素的 config.equalsForConfigSet 为真;如果没有找到这样的元素,则返回 ”。而且它是懒惰地执行的,或者如果您愿意,可以使用短路,所以一旦一个 c 值通过,它就不需要继续; l 的其余部分甚至都没有加载,更不用说测试了(不像列表推导式那样)。

在代码中,您可以使用如下函数表达相同的行为:

def firstEqualsConfigSet(l, config):
for c in l:
if config.equalsForConfigSet(c):
# Short-circuit: got one hit, return it
return c
# Didn't find anything
return None # Redundant to explicitly return None, but illustrating
# that two-arg next could use non-None default

然后使用函数来做:

r = firstEqualsConfigSet(l, config)

关于python - 带有 "next( c for c in l if )"的 python 语句的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com