-
Notifications
You must be signed in to change notification settings - Fork 0
/
generator.py
69 lines (54 loc) · 1.52 KB
/
generator.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
# Python generatos are a simple way of creating iterators
# Example
def gen_demo(): # There is not return statement in generatos
yield 'First Statement'
yield 'Second Statement'
yield 'Third Statement'
gen = gen_demo()
print(gen) # Generator object
# Using the next() function we can get the information holing yieldone by one
print(next(gen)) # First Statement
print(next(gen)) # Second Statement
print(next(gen)) # Third Statement
#print(next(gen)) # StopIteration error
# Example
def square(num):
for i in range(1, num+1):
yield i**2
gen = square(10)
print(next(gen)) # 1
print(next(gen)) # 4
print(next(gen)) # 9
# Here is the interesting part the loop continued form the last state of next() where it yield it's value
# Start form 4
for i in gen:
print(i) # Then 16.. continued
# Range Function Using Generator
def my_range(start, end):
for i in range(start, end):
yield i
for i in my_range(20, 30):
print(i)
# Generator Expression
gen = (i for i in range(4)) # Using First brackets
# Representing Infinite Streams
def all_even():
n = 0
while True:
yield n
n += 2
gen = all_even()
print(next(gen)) # Output: 0
print(next(gen)) # Output: 2
print(next(gen)) # Output: 4
# ... and so on
# Chaining Generators
def fibonacci_numbers(nums):
x, y = 0, 1
for _ in range(nums):
x, y = y, x+y
yield x
def square(nums):
for num in nums:
yield num**2
print(sum(square(fibonacci_numbers(10)))) # Output: 4895