Dernière activité 1755265730

Révision 3bc0b994a5418a5ae56b089267719faba6dbc74b

cool_shit.py Brut
1from database import read
2
3from reddit_scraper.utils import limit_iter
4from typing import Iterable, Generic, TypeVar, List
5
6
7T = TypeVar('T')
8
9
10class CustomIter(Generic[T]):
11 def __init__(self, i: Iterable[T]) -> None:
12 self.i = i
13 self.l: List[T] = []
14
15 def _iter_leftover(self) -> Iterable[T]:
16 for j in self.i:
17 self.l.append(j)
18 yield j
19
20 def __len__(self):
21 list(self._iter_leftover())
22 return len(self.l)
23
24 def __iter__(self):
25 yield from self.l
26 yield from self._iter_leftover()
27
28 @property
29 def empty(self) -> bool:
30 if len(self.l):
31 return False
32
33 for _ in self._iter_leftover():
34 return False
35
36 return True
37
38 @property
39 def first(self) -> T:
40 if self.empty:
41 raise KeyError("can't get first element from empty list")
42 return self.l[0]
43
44 @property
45 def last(self) -> T:
46 if self.empty:
47 raise KeyError("can't get last element from empty list")
48
49 list(self._iter_leftover())
50 return self.l[-1]
51
52
53def test_iter():
54 print("yield foo")
55 yield "foo"
56 print("yield bar")
57 yield "bar"
58 print("yield baz")
59 yield "baz"
60
61
62if __name__ == "__main__":
63 ci: Iterable = CustomIter(test_iter())
64
65 for c in ci:
66 print(c)
67 break
68
69 print("#" * 10)
70 for c in ci:
71 print(c)