我是Python的新手,所以我想我在做“语法上”错误的事情。我正在尝试使用row
和col
作为坐标系遍历网格。到目前为止,这是我的代码:
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__
答案 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循环那样使用它