Недавно я написал метод, который возвращал последовательность открытых файлов; другими словами, что-то вроде этого:
# this is very much simplified, of course
# the actual code returns file-like objects, not necessarily files
def _iterdir(self, *path):
dr = os.path.join(*path)
paths = imap(lambda fn: os.path.join(dr, fn), os.listdir(dr))
return imap(open, paths)
Синтаксически я не ожидаю закрытия результирующих объектов, если я сделаю что-то вроде:
for f in _iterdir('/', 'usr'):
make_unicorns_from(f)
# ! f.close()
В результате я решил обернуть _iterdir
в менеджер контекста:
def iterdir(self, *path):
it = self._iterdir(*path)
while 1:
with it.next() as f:
yield f
Кажется, что он работает правильно.
Меня интересует, является ли это хорошей практикой. Будут ли я сталкиваться с любыми проблемами после этого шаблона (возможно, если исключены исключения)?