-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerators.py
100 lines (75 loc) · 2.19 KB
/
generators.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
"""examples from sametmax"""
def creerGenerateur():
mylist = range(3)
for i in mylist:
yield i * i
generateur1 = creerGenerateur() # cree un generateur
print(generateur1) # generateur1 est un objet !
for i in generateur1:
print(i)
print("une fois")
for i in generateur1:
print(i)
print("pas 2 fois")
generateur2 = creerGenerateur() # cree un generateur
print(generateur2) # generateur2 est un objet !
for i in generateur2:
print(i)
print("une fois gene2")
# ----------------------------------------------------------------------
def read_large_file(file_object):
"""
Uses a generator to read a large file lazily
"""
while True:
data = file_object.readline()
if not data:
break
yield data
# ----------------------------------------------------------------------
def process_file(path):
"""process large file without taking all memory"""
try:
with open(path) as file_handler:
for line in read_large_file(file_handler):
# process line
print(line)
except (IOError, OSError):
print("Error opening / processing file")
# ----------------------------------------------------------------------
# other example:
gen = (ord(i) for i in "ABCDEFGHI")
print(gen) # generator object
# on genere une liste a partir du generateur
print("essai 1: " + str(list(gen))) # premiere fois
print("essai 1: " + str(list(gen))) # deuxieme fois
# ----------------------------------------------------------------------
def countdown():
yield 3
yield 2
yield 1
yield 'Blast off!'
# generator
g = countdown()
next(g) # 2
x = next(g) # 2
print(x)
y, z = next(g), next(g) # 1, 'Balst off'
print(z)
next(g) # 'erro'
# ----------------------------------------------------------------------
# Tip to get started with generators: find places in your code where you do the following:
#
# def something():
# result = []
# for ... in ...:
# result.append(x)
# return result
#
# And replace it by:
#
# def iter_something():
# for ... in ...:
# yield x
# def something(): # Only if you really need a list structure
# return list(iter_something())