Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;加上-比如在迭代器上调用next的语法?_Python_Python 3.x - Fatal编程技术网

Python &引用;加上-比如在迭代器上调用next的语法?

Python &引用;加上-比如在迭代器上调用next的语法?,python,python-3.x,Python,Python 3.x,编辑:这是的副本 我的代码: try: y = next(x) z = next(y) f(y, z) except StopIteration: pass 我想写的是: with x as y, y as z: f(y, z) 但是,这会引发AttributeError:\uuu输入\uu 如果with不是合适的习惯用法,那么除了StopIteration:pass之外,我在没有显式的情况下做的事情是否有其他习惯用法,或者是否有一种方法将迭代器包装成

编辑:这是的副本

我的代码:

try:
    y = next(x)
    z = next(y)
    f(y, z)
except StopIteration:
    pass
我想写的是:

with x as y, y as z:
    f(y, z)
但是,这会引发
AttributeError:\uuu输入\uu

如果
with
不是合适的习惯用法,那么除了StopIteration:pass之外,我在没有显式
的情况下做的事情是否有其他习惯用法,或者是否有一种方法将迭代器包装成支持
with
的类型?语义应该与第一个代码段中的语义完全相同


我这样问是因为x中y的
在这种情况下不起作用。

如果要从迭代器中检索一个项,方法是
next
。它没有单独的成语
next
是专用的“从迭代器获取一件事”函数
绝对不是<代码>与
用于资源清理

您的代码非常奇怪,很难想象会为其添加专门的语法

如果你真的想用不同的方式写,你可以这样做

for y in x:
    for z in y:
        f(y, z)
        break
    break

用于缩短
try:
-
除(*异常,):传递
构造:

from contextlib import suppress

with suppress(StopIteration):
    y = next(x)
    f(y, next(y))

不可能使用辅助对象(x)为y、辅助对象(y)为z的
语法:
:上下文管理器必须返回值或引发异常。这使得当
next(x)
next(y)
不返回值时,无法优雅地处理这种情况。

使用
的目的是在退出块时自动清理资源。这与迭代器有什么关系?很难想象上下文使这些代码变得有意义,这也不能解释为什么不能对迭代器使用
for
。这可能有助于了解
x
的类型是如何定义的,以及您试图通过
f
解决的问题。正如问题明确提出的那样,如果
with
不是忽略
停止迭代
的合适习惯用法,是否有另一个合适的习惯用法?您拒绝显式
try
语法的标准是什么?您正在寻找较短的代码吗?您的目标是不保护
f
不受
StopIteration
(该
尝试:
不受
的影响,但不受
的影响)吗?有没有什么原因使得
x
必须像这样展开,并且可能被绕过?没有那么复杂。它只是要求一种方法来捕获并忽略
StopIteration
,而不使用除StopIteration
之外的显式
。动机和人们回答的一模一样。一个完全有效且信息丰富的答案是“没有专门用于忽略
StopIteration
的功能,但这里有一个用于忽略您指定的任何异常的功能”,这正是公认的答案所做的。
from contextlib import suppress

with suppress(StopIteration):
    y = next(x)
    f(y, next(y))