2013-08-30 3 views
1

По какой-либо причине IDLE не отображает type из tuple i. Любая идея, что здесь не так?IDLE (Python) не отображает тип

IDLE (Python)

>>> d = {"a":"apple","b":"boy","c":"cat"} 
>>> d 
{'a': 'apple', 'b': 'boy', 'c': 'cat'} 
>>> t = ((k,v) for k,v in d.items()) 
>>> t 
<generator object <genexpr> at 0x0237C558> 
>>> for i in t: print(i) 

('a', 'apple') 
('b', 'boy') 
('c', 'cat') 
>>> for i in t: print(type(i)) 

>>> 

ответ

2

Генераторы - это итераторы, но они не хранят данные в памяти, как списки, поэтому к ним можно получить доступ только один раз.
Here - отличное объяснение относительно генераторов.

+0

http://stackoverflow.com/questions/16940293/why-is-there-no-tuple-comprehension 8) Мое намерение состояло в том, чтобы создать кортеж comp'n – GLES

2

Вы можете потреблять итератора/генератор только один раз.

>>> a = [1,2,3] 
>>> g = iter(a) 
>>> for i in g: print i 
... 
1 
2 
3 
>>> for i in g: print i 
... 
>>> 
+0

>>> a = [1,2] >>> для i в a: print (i) # 1 2 >>> для i в a: print (i) # 1 2 Как это отличается ? – GLES

+0

@GLES, 'for i in a: ..' похож на' for i в iter (a): ..', которые создают новый итератор. Если вы сделаете еще один «для i в a», он создаст еще один итератор вместо того, чтобы использовать уже потребленный. – falsetru

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