{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "library execution_time (seconds) iterations\n", "---------- -------------------------- ------------\n", "attrs 0.817883 1000000\n", "class 0.807761 1000000\n", "namedtuple 0.851075 1000000\n", "namedtuple 0.828901 1000000\n", "tuple 0.149515 1000000\n", "dict 0.221976 1000000\n" ] } ], "source": [ "import attr\n", "import time\n", "from collections import namedtuple\n", "from tabulate import tabulate\n", "\n", "TRIALS = 1000000\n", "\n", "@attr.s\n", "class PointAttr:\n", " x = attr.ib()\n", " y = attr.ib()\n", " \n", "PointNamedTuple = namedtuple(\"PointNamedTuple\", [\"x\", \"y\"])\n", "\n", "class PointClass:\n", " def __init__(self, x, y):\n", " self.x = x\n", " self.y = y\n", " \n", "def benchmark_attrs():\n", " attr_instance = PointAttr(x=1, y=2)\n", " assert attr_instance.x == 1\n", " \n", "def benchmark_class():\n", " class_instance = PointClass(x=1, y=2)\n", " assert class_instance.x == 1\n", " \n", "def benchmark_namedtuple():\n", " namedtuple_instance = PointNamedTuple(x=1, y=2)\n", " assert namedtuple_instance.x == 1\n", " \n", "def benchmark_namedtuple_index_access():\n", " namedtuple_instance = PointNamedTuple(x=1, y=2)\n", " assert namedtuple_instance[0] == 1\n", " \n", "def benchmark_dict():\n", " dict_instance = {\"x\": 1, \"y\": 2}\n", " assert dict_instance[\"x\"] == 1\n", " \n", "def benchmark_tuple():\n", " tuple_instance = (1, 2)\n", " assert tuple_instance[0] == 1\n", " \n", "def benchmark(name, func):\n", " start_time = time.time()\n", " for i in range(TRIALS):\n", " func()\n", " elapsed_time = time.time() - start_time\n", " return [name, elapsed_time, TRIALS]\n", " \n", "data = [[\"library\", \"execution_time (seconds)\", \"iterations\"]]\n", "data.append(benchmark(\"attrs\", benchmark_attrs))\n", "data.append(benchmark(\"class\", benchmark_class))\n", "data.append(benchmark(\"namedtuple\", benchmark_namedtuple))\n", "data.append(benchmark(\"namedtuple\", benchmark_namedtuple_index_access))\n", "data.append(benchmark(\"tuple\", benchmark_tuple))\n", "data.append(benchmark(\"dict\", benchmark_dict))\n", "print(tabulate(data, headers=\"firstrow\"))" ] } ], "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.7.2" } }, "nbformat": 4, "nbformat_minor": 2 }