Python for循环中能否同时完成可迭代对象整体赋值与扩展解包?
Python 目前没有原生支持你描述的「for循环语句内同时完成子元素解包、整体元素赋值」的语法,不过有两种接近需求的实现方式,效果和你预期的一致:
方案1:常规写法(优先推荐)
it = zip(*[iter(range(9))]*3) for abc in it: a, b, c = abc # 后续业务逻辑
这个写法可读性最高,完全没有黑魔法,所有Python开发者都能直接理解,额外的解包步骤性能损耗几乎可以忽略,是工业界的通用写法。
方案2:单for行实现(符合你要的「赋值逻辑都在for语句」的需求)
你可以提前包装迭代器,让每次产出的元素同时包含整体值、以及解包后的子元素,写法如下:
it = zip(*[iter(range(9))]*3) for abc, a, b, c in map(lambda x: (x, *x), it): # 直接使用abc(整体元组)、a、b、c即可
如果是不定长的元素,可以结合你提到的扩展可迭代解包特性处理,比如:
for abc, first, *middle, last in map(lambda x: (x, *x), it): # 适配任意长度的迭代元素
你示例里的for (a, b, c := abc) in it:语法目前没有对应的PEP提案支持,暂时无法原生实现。
内容的提问来源于stack exchange,提问作者Jab
相关产品推荐
相关产品推荐

