summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--generators.py34
-rw-r--r--iterator.py26
3 files changed, 61 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9f11b75
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.idea/
diff --git a/generators.py b/generators.py
new file mode 100644
index 0000000..cdc0597
--- /dev/null
+++ b/generators.py
@@ -0,0 +1,34 @@
+
+# here is a simple generator
+# a 'yield' returns an expression which then gets invoked in for loop, a num by itself is an expression
+def gen1():
+ yield 1
+ yield 2
+ yield 3 # at this point python's list implemention will raise StopIteration since were at last yield
+
+a = [i for i in gen1()]
+print(a)
+
+
+# following example depicts how Comprehensions are syntactically almost the same except the use of () instead of []
+
+gen2 = ("{0} is even".format(i) for i in range(0, 10) if i % 2 == 0)
+print(gen2.__next__()) # get a value
+print(list(gen2)) # loop till the end
+#print(gen2.__next__()) # this would error, generator can only be looped once
+
+# output
+#
+# 0 is even
+# ['2 is even', '4 is even', '6 is even', '8 is even']
+
+
+
+# here is a Generator version of string reversal from interator.py
+
+def reverseString2(data):
+ for index in range(len(data) - 1, -1, -1):
+ yield data[index]
+
+for c in reverseString2('barfoo'):
+ print(c)
diff --git a/iterator.py b/iterator.py
new file mode 100644
index 0000000..2b1e14e
--- /dev/null
+++ b/iterator.py
@@ -0,0 +1,26 @@
+# this class implements an iterator
+# python needs to be told when to stop iterating, this is done by raising StopIteration exception
+
+class ReverseString():
+ def __init__(self, data):
+ self.data = data
+ self.index = len(data)
+
+ def __iter__(self):
+ return self
+
+ def __next__(self):
+ if self.index == 0:
+ raise StopIteration
+ self.index -= 1
+ return self.data[self.index]
+
+
+def main():
+ foo = ReverseString('foobar')
+ for c in foo:
+ print(c)
+
+
+if __name__ == "__main__":
+ main()