Найти - Пользователи
Полная версия: Непонятно мне поведение генераторного выражения.
Начало » Python для экспертов » Непонятно мне поведение генераторного выражения.
1
knkd
Почему подобный код работает в момент объявления:
#!/usr/bin/env python

(open('file.txt','a').write(x) for x in xrange(100))

# Или например:
(x for x in xrange(1000000))
Ведь по идее генераторное выражение должно возвращать генератор, а не производить вычисления на месте?
Была идея что без оператора присваивания интерпретатор игнорирует скобки, но такое выражение некорректно:
#!/usr/bin/env python

open('file.txt','a').write(x) for x in xrange(100)
x for x in xrange(1000000)
непонятно…
Zubchick
Не очень вас понял, если используете квадратные скобки то получаете список, если круглые, то генератор.
Если не используете скобки, получаете ошибку.

Какие именно вычисления производятся на месте?
knkd
Zubchick
Какие именно вычисления производятся на месте?
только что проверил (KUbuntu 9.10, Python-2.6.4) действительно не работает.

Но на работе (WinXP-SP3, Python-2.6.4) оба варианта работали идентично.
(open('file.txt','a').write(str(x)+'\n') for x in xrange(100))
[open('file.txt','a').write(str(x)+'\n') for x in xrange(100)]
Если у меня глюки то прошу прощения за беспокойство. (кстати версию 2,6,4 на работе поставил только сегодня утром. хм)
Zubchick
у меня одинаково. Версии питонов совпадают.
Андрей Светлов
Кажется, глюки. Может, недосыпание?
knkd
Zubchick
у меня одинаково. Версии питонов совпадают.
Запущенное из файла, именно так в одну строчку.

Андрей Светлов
Кажется, глюки
Возможно что и так. Но блин пол-часа экспериментировал - генераторное выражение направленное в xrange(100000000) стабильно вызывало мэмори эррор…
пойду выпью валерьянки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB