Python:尝试创建两个变量的上下文管理器

时间:2019-06-17 10:17:02

标签: python python-3.x

我是Python的新手,所以我想我在做“语法上”错误的事情。我正在尝试使用rowcol作为坐标系遍历网格。到目前为止,这是我的代码:

from contextlib import contextmanager

# this is the behavior I want
for row in range(10):
    for col in range(10):
        print("row: {}, col: {}".format(row, col))

@contextmanager
def grid_iter():
    for row in range(10):
        for col in range(10):
            yield row, col

# this is my attempt at a context manager so I can reuse this.
with grid_iter() as row, col:
    print("row: {}, col: {}".format(row, col))

这是我得到的输出:

row: 0, col: 0
row: 0, col: 1
row: 0, col: 2
....
row: 9, col: 7
row: 9, col: 8
row: 9, col: 9
Traceback (most recent call last):
  File "grid_iterator.py", line 17, in <module>
    with grid_iter() as row, col:
AttributeError: __exit__

1 个答案:

答案 0 :(得分:2)

您应该能够做到:

def grid_iter():
    for row in range(10):
        for col in range(10):
            yield row, col

for row, col in grid_iter():
    print("row: {}, col: {}".format(row, col))

使用yield本身会使grid_iter返回一个生成器(您可以通过运行print(type(grid_iter()))进行检查,然后像正常的for-in循环那样使用它