gpt4 book ai didi

python - 循环内的副作用会影响它的生成器吗?

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:35 25 4
gpt4 key购买 nike

在 Python v2.7 中,我在 for 生成器上遇到了一个 for 语句,其中在循环主体中的项目是 for 生成器有副作用:

for ssid in (ssid for ssid in overlaps if ssid != subseq_id):
overlaps = subseq_id_to_overlap_ssids_dict[ssid]

我的问题是重叠的副作用是否应该影响 for 生成器?我希望不是,但如果是这样,那到底是什么意思?如果我处理了第一个匹配元素并现在替换了 overlapsfor 是否会索引到 overlaps 的新值的下一个位置?

最佳答案

在循环内重新绑定(bind) overlaps 不会对循环产生任何影响(尽管改变它显然会)。在循环中重新绑定(bind) subseq_iq 可能会影响生成器。

for 循环在循环开始时计算表达式以获取迭代器一次:在这种情况下,表达式只是名称 overlaps。一旦它评估了该表达式,它就会从可迭代对象中创建一个迭代器,并使用该迭代器来遍历元素。迭代器取决于表达式返回的对象,它不取决于用于标识该对象的名称(如果确实有任何名称)。

如果是这种特殊情况,代码完全等同于:

for ssid in overlaps:
if ssid != subseq_id:
overlaps = subseq_id_to_overlap_ssids_dict[ssid]

这是一种更清晰的编写方式,但是重新绑定(bind) overlaps 不会改变 for 使用的序列。

关于python - 循环内的副作用会影响它的生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15159997/

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