Κώδικας για το profiling συναρτήσεων. Χρήσιμο για τη σύγκριση των χρόνων εκτέλεσης εναλλακτικών προσεγγίσεων.
Στο συγκεκριμένο παράδειγμα γίνεται σύγκριση της ταχύτητας εκτέλεσης loops.
Ο κώδικας τρέχει τόσο για python 2 οσο και για 3.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import timeit
import sys
times = 1000
size = 10000
def for_statement():
a = []
for x in range(size):
a.append(abs(x))
def list_comprehension():
a = [abs(x) for x in range(size)]
def map_function():
# map function has changed in Python 3
# in python 2 it returns a list.
# in python 3 it returns a generator.
if sys.version_info.major == 2:
a = map(abs, range(size))
else:
a = list(map(abs, range(size)))
def generator_expression():
a = list(abs(x) for x in range(size))
functions = (for_statement, list_comprehension, map_function, generator_expression)
print(sys.version)
print(30 * "-")
for function in functions:
t = timeit.Timer("{0}()".format(function.__name__), "from __main__ import {0}".format(function.__name__))
print("{0:30} => {1}".format(function.__name__, t.timeit(times)))
print(30 * "-")
#import cProfile
#for function in functions:
# cProfile.run(str(function.__name__) + "()")