2013-05-29 2 views
1

сегодня Im учитель генераторов итератор и т. Д. В других, чтобы сохранить память, я думаю, что вместо этого у вас есть список, сбрасываемый в память, тем лучше, чтобы их оценивали по мере необходимости, поэтому я делаю простой тест, например, ниже генератора вот так.Как использовать генераторы python

def test(*args): 
    for i in args: 
     yield i 

, когда я использую его, как показано ниже, дает желаемый эффект.

for i in test(range(10)): 
    print i 

с выходом, как так

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

но тогда диапазон будет сбрасывать все количество в функцию, которая противоречит цели, поэтому я попытался xrange, как показано ниже

for i in test(xrange(10)): 
    print i 

я получаю довольно неожиданный вывод, подобный этому

xrange(10) 

но смотрит в другую сторону, так как xrange будет оценивать, когда итерация только поэтому я стараюсь заставить его сделать это как так

for i in ye(*xrange(10)): 
    print i 

, а затем я получил такой вывод

o 
1 
. 
. 

может кто-то объяснить, то, что происходит в деталях, пожалуйста,

ответ

1

Использование функции * в определении функции требует вызова , чтобы предоставить отдельные аргументы функции. Рассмотрите возможность его удаления и напрямую используйте args.

+0

плохой, чтобы знать, почему я иду t каждый номер в то время, когда я использую звезду. И что сделала звезда для xrange. – user1940979

+0

http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists –

Смежные вопросы