{ "metadata": { "name": "", "signature": "sha256:e6a1d9a637dfbad45211a98a5bbc35255dc8f168a834ed466c363dfc384c0f59" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Python benchmarks via `timeit`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sections\n", "- [String formatting](#string_formatting)\n", " - [String formatting - .format() vs. binary operator %s](#str_format_bin)\n", " - [String Reversing - [::-1] vs. `''.join(reversed())`](#str_reverse)\n", "- [List Operations](#list_operations)\n", " - [List Reversing - [::-1] vs. reverse() vs. reversed()](#list_reverse)\n", "- [Dictionary Operations](#dict_ops) \n", " - [Adding elements to a dictionary](#adding_dict_elements)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "# String formatting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### String formatting - `.format()` vs. binary operator `%s`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def test_format():\n", " return ['{}'.format(i) for i in range(1000000)]\n", "\n", "def test_binaryop():\n", " return ['%s' %i for i in range(1000000)]\n", "\n", "%timeit test_format()\n", "%timeit test_binaryop()\n", "\n", "#print('{}: {}\\n{}: {}'.format('format()', format_res, '%s', binaryop_res))\n", "\n", "################################\n", "# On my machine\n", "################################\n", "#\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.5 GHz Intel Core i5\n", "# 4 GB 1600 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 loops, best of 3: 400 ms per loop\n", "1 loops, best of 3: 241 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### String Reversing - `[::-1]` vs. `''.join(reversed())`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def reverse_join(my_str):\n", " return ''.join(reversed(my_str))\n", " \n", "def reverse_slizing(my_str):\n", " return my_str[::-1]\n", "\n", "\n", "# Test to show that both work\n", "a = reverse_join('abcd')\n", "b = reverse_slizing('abcd')\n", "assert(a == b and a == 'dcba')\n", "\n", "%timeit reverse_join('abcd')\n", "%timeit reverse_slizing('abcd')\n", "\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.4 GHz Intel Core Duo\n", "# 8 GB 1067 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000000 loops, best of 3: 1.28 \u00b5s per loop\n", "1000000 loops, best of 3: 337 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# List Operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### List Reversing - `[::-1]` vs. `reverse()` vs. `reversed()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def reverse_func(my_list):\n", " new_list = my_list[:]\n", " new_list.reverse()\n", " return new_list\n", " \n", "def reversed_func(my_list):\n", " return list(reversed(my_list))\n", "\n", "def reverse_slizing(my_list):\n", " return my_list[::-1]\n", "\n", "%timeit reverse_func([1,2,3,4,5])\n", "%timeit reversed_func([1,2,3,4,5])\n", "%timeit reverse_slizing([1,2,3,4,5])\n", "\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.4 GHz Intel Core Duo\n", "# 8 GB 1067 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000000 loops, best of 3: 930 ns per loop\n", "1000000 loops, best of 3: 1.89 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000000 loops, best of 3: 775 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Dictionary Operations " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Adding elements to a Dictionary" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import random\n", "\n", "random.seed(123)\n", "rand_ints = [randrange(1, 10) for i in range(100)]\n", "\n", "def add_element_check1(my_dict, elements):\n", " for e in elements:\n", " if e not in my_dict:\n", " my_dict[e] = 1\n", " else:\n", " my_dict[e] += 1\n", " \n", "def add_element_check2(my_dict, elements):\n", " for e in elements:\n", " if e not in my_dict:\n", " my_dict[e] = 0\n", " my_dict[e] += 1 \n", "\n", "def add_element_except(my_dict):\n", " for e in elements:\n", " try:\n", " elements[e] += 1\n", " except KeyError:\n", " elements[e] = 1\n", " " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1\n", "5\n", "2\n", "7\n", "5\n", "2\n", "1\n", "7\n", "9\n", "9\n", "\n", "\n", "6\n", "6\n", "1\n", "3\n", "3\n", "6\n", "9\n", "6\n", "4\n", "3\n" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }