File tree Expand file tree Collapse file tree 1 file changed +30
-1
lines changed Expand file tree Collapse file tree 1 file changed +30
-1
lines changed Original file line number Diff line number Diff line change @@ -523,13 +523,31 @@ class IterBetter:
523523 Traceback (most recent call last):
524524 ...
525525 IndexError: already passed 3
526+
527+ For boolean test, IterBetter peeps at first value in the itertor without effecting the iteration.
528+
529+ >>> c = iterbetter(iter(range(5)))
530+ >>> bool(c)
531+ True
532+ >>> list(c)
533+ [0, 1, 2, 3, 4]
534+ >>> c = iterbetter(iter([]))
535+ >>> bool(c)
536+ False
537+ >>> list(c)
538+ []
526539 """
527540 def __init__ (self , iterator ):
528541 self .i , self .c = iterator , 0
542+
529543 def __iter__ (self ):
544+ if hasattr (self , "_head" ):
545+ yield self ._head
546+
530547 while 1 :
531548 yield self .i .next ()
532549 self .c += 1
550+
533551 def __getitem__ (self , i ):
534552 #todo: slices
535553 if i < self .c :
@@ -545,7 +563,18 @@ def __getitem__(self, i):
545563 raise IndexError , str (i )
546564
547565 def __nonzero__ (self ):
548- return len (self ) != 0
566+ if hasattr (self , "__len__" ):
567+ return len (self ) != 0
568+ elif hasattr (self , "_head" ):
569+ return True
570+ else :
571+ try :
572+ self ._head = self .i .next ()
573+ except StopIteration :
574+ return False
575+ else :
576+ return True
577+
549578
550579iterbetter = IterBetter
551580
You can’t perform that action at this time.
0 commit comments