Last active
August 29, 2015 14:16
-
-
Save jabooth/fdc4d47684e409925dd8 to your computer and use it in GitHub Desktop.
Advanced Python - 3. Iterators and higher-order functions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Advanced Python - 3. Iterators and higher-order functions" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "source": [ | |
| "#### the power of iterators" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "does range(4) == [0, 1, 2, 3]?: False\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# so was range just a list?\n", | |
| "print('does range(4) == [0, 1, 2, 3]?: '\n", | |
| " '{}'.format(range(4) == [0, 1, 2, 3]))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "summation over [1,..., 10 ** 8] = 5000000050000000\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# Nope, range is a iterator - it generates the next value \n", | |
| "# dynamically as it is requested. This way we don't need \n", | |
| "# all the things we want to iterate over in memory\n", | |
| "\n", | |
| "# no memory cost\n", | |
| "summation = 0\n", | |
| "for i in range(1, 10 ** 8 + 1):\n", | |
| " summation += i\n", | |
| "print('summation over [1,..., 10 ** 8] = {}'.format(summation))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "summation over [1, ..., 10 ** 8] = 5000000050000000\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# a list with 10 ** 8 elements in RAM!\n", | |
| "# boy this is expensive (check your RAM usage)\n", | |
| "range_as_list = list(range(1, 10 ** 8 + 1))\n", | |
| "\n", | |
| "summation = 0\n", | |
| "for i in range_as_list:\n", | |
| " summation += i\n", | |
| "print('summation over [1, ..., 10 ** 8] = {}'.format(summation))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "source": [ | |
| "### Functional programming" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# let's write a bubble sort!\n", | |
| "\n", | |
| "def bubble_sort(a):\n", | |
| " n = len(a)\n", | |
| " for i in range(n):\n", | |
| " for j in range(n - 1, i - 1, -1):\n", | |
| " if a[j] < a[j - 1]:\n", | |
| " a[j], a[j - 1] = a[j - 1], a[j]\n", | |
| " return a" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[-1, 1, 2, 4, 8]" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# let's try our implementation\n", | |
| "l = [-1, 4, 1, 2, 8]\n", | |
| "bubble_sort(l)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['a', 'b', 'd', 'w']" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# interestingly we can sort letters too..\n", | |
| "l = ['b', 'w', 'a', 'd']\n", | |
| "\n", | |
| "bubble_sort(l)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['d', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# to convert a string to a list is trivial\n", | |
| "bubble_sort(list('helloworld'))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "list('helloworld')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "source": [ | |
| "### Measuring performance" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "#### Generating some data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import random\n", | |
| "\n", | |
| "# make us a random list length (between 1 - 2000)\n", | |
| "def rand_len():\n", | |
| " return random.randint(1, 2e3)\n", | |
| "\n", | |
| "# choose a random value for a list element (between 0 1e6)\n", | |
| "def rand_int():\n", | |
| " return random.randint(0, 1e6)\n", | |
| "\n", | |
| "# generate a random list of random length -\n", | |
| "# here we use a list comprehension, a very tidy\n", | |
| "# way of transforming lists of data\n", | |
| "\n", | |
| "def rand_list():\n", | |
| " return [rand_int() for i in range(rand_len())]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[257270, 144602, 358684, 525680, 988993]" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# test our rand_list() function\n", | |
| "# peek at the first 5 elements\n", | |
| "rand_list()[:5] # hit ctrl + enter to run this cell many times" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1917" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# check lists are randomly sized\n", | |
| "len(rand_list()) # hit ctrl + enter to run this cell many times" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# build 100 lists to test\n", | |
| "random_lists = [rand_list() for i in range(100)]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "100000 loops, best of 3: 4.56 µs per loop\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# IPython has a very convienient timer module!\n", | |
| "# chooses how many times to repeat based on how\n", | |
| "# long the execution time is and averages for us\n", | |
| "%timeit bubble_sort([0, 1, 2, 3])\n", | |
| "\n", | |
| "# but we want to programatically record the\n", | |
| "# timings..." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "1 loops, best of 3: 103 ms per loop\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# on a longer input the %timeit does many less\n", | |
| "# loops to keep running time sensible\n", | |
| "%timeit bubble_sort(random_lists[10])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "#### Making a timer" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We want to write a re-usable piece of code that times the length of another function's execution.\n", | |
| "\n", | |
| "With our Java hats on..." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def big_loop():\n", | |
| " summation = 0\n", | |
| " for i in range(1, 10 ** 8 + 1):\n", | |
| " summation += i\n", | |
| " return summation" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import time\n", | |
| "\n", | |
| "\n", | |
| "class TimableInterface:\n", | |
| " \n", | |
| " def call(self):\n", | |
| " # do your work here!\n", | |
| " pass\n", | |
| " \n", | |
| "\n", | |
| "class ThingIWantToTime(TimableInterface):\n", | |
| " \n", | |
| " def call(self):\n", | |
| " big_loop() # hope we can statically see this function..\n", | |
| "\n", | |
| "def java_timer(timable):\n", | |
| " before = time.clock()\n", | |
| " timable.call() # use our interface\n", | |
| " after = time.clock()\n", | |
| " return after - before" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "7.104903" | |
| ] | |
| }, | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "timable = ThingIWantToTime()\n", | |
| "java_timer(timable)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "This is a lot of work! Wouldn't it be easier if I could just pass **the function I want to time** into my timer?\n", | |
| "\n", | |
| "In Python, functions are first-class citizens, so you can." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import time\n", | |
| "\n", | |
| "def time_f(f):\n", | |
| " before = time.clock()\n", | |
| " f()\n", | |
| " after = time.clock()\n", | |
| " return after - before" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "7.605234000000003" | |
| ] | |
| }, | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "time_f(big_loop) # much nicer :)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "t = []\n", | |
| "n = []\n", | |
| "\n", | |
| "# test our bubble sort - record the time (t) it took to\n", | |
| "# run and the length of the input (n)\n", | |
| "for r_list in random_lists:\n", | |
| " # lambdas are very convienient here (we want\n", | |
| " # to delay the invocation of the function).\n", | |
| " # notice we are passing a *function*, not it's\n", | |
| " # result (fuctions are first class citizens in\n", | |
| " # Python)\n", | |
| " t.append(time_f(lambda: bubble_sort(r_list)))\n", | |
| " n.append(len(r_list))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "metadata": { | |
| "collapsed": false, | |
| "internals": {}, | |
| "slideshow": { | |
| "slide_type": "-" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(0, 0.50000000000000011)" | |
| ] | |
| }, | |
| "execution_count": 21, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": [ | |
| "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\n", | |
| "PVPjAAAAAElFTkSuQmCC\n" | |
| ], | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x1fe7cf6a0>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "%matplotlib inline\n", | |
| "from matplotlib import pyplot as plt\n", | |
| "plt.scatter(n, t)\n", | |
| "plt.xlabel('n')\n", | |
| "plt.ylabel('time (/s)')\n", | |
| "plt.xlim(0)\n", | |
| "plt.ylim(0)" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.4.2" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment