Python iterators and generators

Slides:



Advertisements
Similar presentations
A Crash Course Python. Python? Isn’t that a snake? Yes, but it is also a...
Advertisements

0 PROGRAMMING IN HASKELL Chapter 12 – Lazy evaluation and infinite lists Slides not from Hutton.
COMPSCI 105 S Principles of Computer Science Linked Lists 2.
Introduction to Python
Unittest in five minutes Ray Toal How to unit test Not manually, that's for sure You write code that exercises your code Perform assertions.
Python Control of Flow.
Lilian Blot CORE ELEMENTS COLLECTIONS & REPETITION Lecture 4 Autumn 2014 TPOP 1.
Introduction to Python Lecture 1. CS 484 – Artificial Intelligence2 Big Picture Language Features Python is interpreted Not compiled Object-oriented language.
Builtins, namespaces, functions. There are objects that are predefined in Python Python built-ins When you use something without defining it, it means.
Python: Classes By Matt Wufsus. Scopes and Namespaces A namespace is a mapping from names to objects. ◦Examples: the set of built-in names, such as the.
By: Chris Harvey Python Classes. Namespaces A mapping from names to objects Different namespaces have different mappings Namespaces have varying lifetimes.
8 For-Statements © 2010 David A Watt, University of Glasgow Accelerated Programming 2 Part I: Python Programming 1.
Built-in Data Structures in Python An Introduction.
Iterators, Linked Lists, MapReduce, Dictionaries, and List Comprehensions... OH MY! Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their.
Getting Started with Python: Constructs and Pitfalls Sean Deitz Advanced Programming Seminar September 13, 2013.
Python iterators and generators. Iterators and generators  Python makes good use of iterators  And has a special kind of generator function that is.
Iterators and Generators Thomas Wouters XS4ALL
Data Collections: Lists CSC 161: The Art of Programming Prof. Henry Kautz 11/2/2009.
CIT 590 Intro to Programming Files etc. Announcements From HW5 onwards (HW5, HW6,…) You can work alone. You can pick your own partner. You can also stick.
Cem Sahin CS  There are two distinguishable kinds of errors: Python's Errors Syntax ErrorsExceptions.
Copyright © 2012 Pearson Education, Inc. Publishing as Pearson Addison-Wesley C H A P T E R 8 Lists and Tuples.
Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game.
Python Let’s get started!.
1 CSC 221: Introduction to Programming Fall 2011 Input & file processing  input vs. raw_input  files: input, output  opening & closing files  read(),
Tirgul 10. What We Will See Today:  Linked lists  Graphs  Trees  Iterators and Generators.
LISTS and TUPLES. Topics Sequences Introduction to Lists List Slicing Finding Items in Lists with the in Operator List Methods and Useful Built-in Functions.
Lists Victor Norman CS104. Reading Quiz Lists Our second collection data type – elements are in order (like strings) – indexed from 0 to n – 1 (like.
PYTHON FOR HIGH PERFORMANCE COMPUTING. OUTLINE  Compiling for performance  Native ways for performance  Generator  Examples.
EXCEPTIONS. Catching exceptions Whenever a runtime error occurs, it create an exception object. The program stops running at this point and Python prints.
Lists/Dictionaries. What we are covering Data structure basics Lists Dictionaries Json.
Indentations makes the scope/block Function definition def print_message (): print “hello” Function usages print_message () hubo.move ()// hubo is a class.
Gordon Bell observed: The cheapest, fastest and most reliable components of a computer system are those that aren't there. This has a parallel in data.
Python Loops and Iteration
Sequences and Indexing
Algorithmic complexity: Speed of algorithms
Python Let’s get started!.
CSC 458– Predictive Analytics I, Fall 2017, Intro. To Python
Computer Programming Fundamentals
Containers and Lists CIS 40 – Introduction to Programming in Python
CS-104 Final Exam Review Victor Norman.
Lecture 24: print revisited, tuples cont.
Presented By S.Yamuna AP/IT
Tutorial Lecture for EE562 Artificial Intelligence for Engineers
Section 6: Sequences Chapter 4 and 5.
Programming for Engineers in Python
Topics Introduction to Repetition Structures
Repeating code We could repeat code we need more than once: i = 1 print (i) i += 1 print (i) #… stop when i == 9 But each line means an extra line we might.
Introduction to Python
Introduction to Python
Python Primer 2: Functions and Control Flow
File Handling Programming Guides.
Exception Handling.
Python’s Errors and Exceptions
CISC101 Reminders Slides have changed from those posted last night…
Data types Numeric types Sequence types float int bool list str
CSC 458– Predictive Analytics I, Fall 2018, Intro. To Python
Python LinkedLists.
Python Tutorial for C Programmer Boontee Kruatrachue Kritawan Siriboon
Algorithmic complexity: Speed of algorithms
Topics Sequences Introduction to Lists List Slicing
Python programming exercise
CISC101 Reminders Assignment 2 due today.
Algorithmic complexity: Speed of algorithms
Winter 2019 CISC101 4/29/2019 CISC101 Reminders
By Ryan Christen Errors and Exceptions.
Topics Sequences Introduction to Lists List Slicing
“Everything Else”.
Streams Contract is the same as pairs...
Python iterators and generators
Introduction to Computer Science
Presentation transcript:

Python iterators and generators

Iterators and generators Python makes good use of iterators And has a special kind of generator function that is powerful and useful We’ll look at what both are And why they are useful See Norman Matloff’s excellent tutorial on python iterators and generators from which some of this material is borrowed

Files are iterators >>> f = open("myfile.txt") >>> for l in f.readlines(): print len(l) 9 21 35 43 >>> for l in f: print len(l) ... readlines() returns a list of the lines in file A file is a iterator, producing new values as needed

Files are iterators Iterators are supported wherever you can iterate over collections in containers (e.g., lists, tuples, dictionaries) >>> f = open("myfile.txt") >>> map(len, f.readlines()) [9, 21, 35, 43] >>> map(len, f) >>>

Like sequences, but… Iterators are like sequences (lists, tuples), but… The entire sequence is not materialized Items produced one at a time as needed The sequence can be infinite (e.g., all positive integers) You can create your own iterators if you write a function to generate the next item

next() Method An iterator’s next method produces items >>> def intsfrom(i): while True: yield i i += 1 >>> ints = intsfrom(1) >>> ints.next() 1 2 3

Example: fib.py class fibnum: def __init__(self): self.fn2 = 1 self.fn1 = 1 def next(self): # next() is the heart of any iterator # use of the following tuple to not only save lines of # code but insures that only the old values of self.fn1 and # self.fn2 are used in assigning the new values (self.fn1, self.fn2, oldfn2) = (self.fn1+self.fn2, self.fn1, self.fn2) return oldfn2 def __iter__(self): return self next() used to generate successive values Classes with an __iter__() method are iterators http://cs.umbc.edu/courses/331/fall13/code/python/itgen/fib.py

Example: fib.py >>> from fib import * >>> f = fibnum() >>> for i in f: ... print i ... If i > 100: break 1 2 3 … 144 >>> http://cs.umbc.edu/courses/331/fall13/code/python/itgen/fib.py

Stopping an iterator class fibnum20: def __init__(self): self.fn2 = 1 # "f_{n-2}" self.fn1 = 1 # "f_{n-1}" def next(self): (self.fn1,self.fn2,oldfn2) = (self.fn1+self.fn2,self.fn1,self.fn2) if oldfn2 > 20: raise StopIteration return oldfn2 def __iter__(self): return self Raise this error to tell consumer to stop http://cs.umbc.edu/courses/331/fall13/code/python/itgen/fib.py

Stopping an iterator >>> from fib import * >>> for i in fibnum20(): print i 1 2 3 5 8 13 >>> http://cs.umbc.edu/courses/331/fall10/code/python/itgen/fib.py

More tricks The list function materializes an iterator’s values as a list >>> list(fibnum20()) [1, 1, 2, 3, 5, 8, 13 sum(), max(), min() know about iterators >>> sum(fibnum20()) 33 >>> max(fibnum20()) 13 >>> min(fibnum20()) 1

itertools The itertools library module has some useful tools for working with iterators islice() is like slice but works with streams produced by iterators >>> from itertools import * >>> list(islice(fibnum(), 6)) [1, 1, 2, 3, 5, 8] >>> list(islice(fibnum(), 6, 10)) [13, 21, 34, 55] See also imap, ifilter, …

Python generators Python generators generate iterators They are more powerful and convenient Write a regular function and instead of calling return to produce a value, call yield instead When another value is needed, the generator function picks up where it left off Raise the StopIteration exception or call return when you are done

Generator example def gy(): x = 2 y = 3 yield x,y,x+y z = 12 yield z/x yield z/y return >>> from gen import * >>> g = gy() >>> g.next() (2, 3, 5) 6 4 Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> http://cs.umbc.edu/courses/331/fall13/code/python/itgen/gen.py

Generator example: fib() def fib( ): fn2 = 1 fn1 = 1 while True: (fn1,fn2,oldfn2) = (fn1+fn2,fn1,fn2) yield oldfn2 http://cs.umbc.edu/courses/331/fall13/code/python/itgen/gen.py

Generator example: getword() def getword(file): for line in file: for word in line.split(): yield word return http://cs.umbc.edu/courses/331/fall13/code/python/itgen/gen.py

Remembers stack, too def inorder(tree): if tree: for x in inorder(tree.left): yield x yield tree.dat for x in inorder(tree.right):

Sieve of Eratosthenes def intsfrom(i): # generator for ints >= I while True: yield i i += 1  def nextn(g, n): # next n items in generator g return [g.next() for i in xrange(n)] def remove(n, g): # remove multiples of n for x in g: if x % n: yield x def sieve(ints): # generator for primes p = ints.next() yield p for p in sieve(remove(p, ints)): def main(): primes = sieve(intsfrom(2)) while True: print "Next 10 primes" print nextn(primes, 10) raw_input('--more-- ') if __name__ == "__main__": main()

A session python> python sieve.py Next 10 primes [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] --more-- [31, 37, 41, 43, 47, 53, 59, 61, 67, 71] [73, 79, 83, 89, 97, 101, 103, 107, 109, 113] [127, 131, 137, 139, 149, 151, 157, 163, 167, 173]