Понимание списка в порядке, это работает:
[bar() for i in range(10)]
Это выражения генератора (то, что вы передали этому вызову list()
), которые не подходят:
gexpr = (bar() for i in range(10))
list(gexpr)
Разница: элементы в списке понимания оцениваются во время определения. Элементы в выражении генератора оцениваются, когда вызывается next()
(например, посредством итерации, когда вы передаете его в list()
), поэтому оно должно сохранять ссылку на область, в которой оно определено. Эта ссылка на область видимо неправильно обрабатывается; скорее всего, это просто ошибка IPython.