Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- from numpy.random import random
- import time
- import time
- def howlong(f):
- def tmp(*args, **kwargs):
- t = time.time()
- res = f(*args, **kwargs)
- need_time = time.time()-t
- tmp.__name__ = f.__name__
- tmp.__doc__ = f.__doc__
- #print u"%s time: %f" % ((f.__doc__), need_time)
- print ".",
- return need_time
- return tmp
- def test(tests):
- results = {}
- for test in tests:
- results[test.__doc__] = test()
- print "\nRESULTS"
- sorted_results = sorted(results.items(), key=lambda x:x[1] )
- best_name, best_result = sorted_results[0]
- for name, result in sorted_results:
- if name == best_name:
- description = "100%"
- else:
- description = "%s%%" % (int(100 + 100 * (result - best_result) / best_result))
- print "%70s - %20s - %10s" % (name, round(result, 3), description)
- print "--"
- ################
- lst = []
- for i in range(1, 500000):
- val = random() + i
- lst.append(val)
- GLOBAL_VALUE = 130.98098908
- #############################
- class TestList():
- def __init__(self, lst):
- self.lst = lst
- self.attr_value = GLOBAL_VALUE
- def _process_method_square(self, value):
- return value ** 2
- ####method
- def cls_process_list_method_add_attr_value(self):
- new_lst = []
- for l in self.lst:
- new_lst.append(self._process_method_square(l))
- for nl in new_lst:
- nl + self.attr_value
- def cls_process_list_method_add_local_value(self):
- new_lst = []
- for l in self.lst:
- new_lst.append(self._process_method_square(l))
- local_value = GLOBAL_VALUE
- for nl in new_lst:
- nl + local_value
- def cls_process_list_method_add_global_value(self):
- new_lst = []
- for l in self.lst:
- new_lst.append(self._process_method_square(l))
- for nl in new_lst:
- nl + GLOBAL_VALUE
- ####local func
- def cls_process_list_local_func_add_local_value(self):
- new_lst = []
- local_func = global_func
- for l in self.lst:
- new_lst.append(local_func(l))
- local_value = GLOBAL_VALUE
- for nl in new_lst:
- nl + local_value
- def cls_process_list_local_func_add_global_value(self):
- new_lst = []
- local_func = global_func
- for l in self.lst:
- new_lst.append(local_func(l))
- for nl in new_lst:
- nl + GLOBAL_VALUE
- def cls_process_list_local_func_add_attr_value(self):
- new_lst = []
- local_func = global_func
- for l in self.lst:
- new_lst.append(local_func(l))
- for nl in new_lst:
- nl + self.attr_value
- ####global func
- def cls_process_list_global_func_add_local_value(self):
- new_lst = []
- for l in self.lst:
- new_lst.append(global_func(l))
- local_value = GLOBAL_VALUE
- for nl in new_lst:
- nl + local_value
- def cls_process_list_global_func_add_global_value(self):
- new_lst = []
- for l in self.lst:
- new_lst.append(global_func(l))
- for nl in new_lst:
- nl + GLOBAL_VALUE
- def cls_process_list_global_func_add_attr_value(self):
- new_lst = []
- for l in self.lst:
- new_lst.append(global_func(l))
- for nl in new_lst:
- nl + self.attr_value
- #iterators
- def cls_process_iterator_add_local(self):
- new_lst = [l ** 2 for l in self.lst]
- local_value = GLOBAL_VALUE
- for nl in new_lst:
- nl + local_value
- def cls_process_iterator_add_global(self):
- new_lst = [l ** 2 for l in self.lst]
- for nl in new_lst:
- nl + GLOBAL_VALUE
- def cls_process_iterator_add_attr(self):
- new_lst = [l ** 2 for l in self.lst]
- local_value = GLOBAL_VALUE
- for nl in new_lst:
- nl + self.attr_value
- def get_lst_processing_class():
- return TestList(lst)
- def global_func(i):
- return i ** 2
- ###############
- #method
- c1 = get_lst_processing_class()
- c2 = get_lst_processing_class()
- c3 = get_lst_processing_class()
- #local
- c4 = get_lst_processing_class()
- c5 = get_lst_processing_class()
- c6 = get_lst_processing_class()
- #global
- c7 = get_lst_processing_class()
- c8 = get_lst_processing_class()
- c9 = get_lst_processing_class()
- #iterator
- c10 = get_lst_processing_class()
- c11 = get_lst_processing_class()
- c12 = get_lst_processing_class()
- #######################################
- @howlong
- def process_list_local_func_plus_local_value():
- """Функция. Обработка в цикле с вызовом локальной функции и добавлением локальной переменной"""
- local_plus_value = GLOBAL_VALUE
- def local_func(i):
- return i ** 2
- new_lst = []
- for i in lst:
- new_lst.append(local_func(i))
- for v in new_lst:
- v + local_plus_value
- @howlong
- def process_list_local_func_plus_global_value():
- """Функция. Обработка в цикле с вызовом локальной функции и добавлением глобальной переменной"""
- def local_func(i):
- return i ** 2
- new_lst = []
- for i in lst:
- new_lst.append(local_func(i))
- for v in new_lst:
- v + GLOBAL_VALUE
- ###
- @howlong
- def process_list_global_func_plus_local_value():
- """Функция. Обработка в цикле с вызовом глобальной функции и добавлением локальной переменной"""
- local_plus_value = GLOBAL_VALUE
- new_lst = []
- for i in lst:
- new_lst.append(global_func(i))
- for v in new_lst:
- v + local_plus_value
- @howlong
- def process_list_global_func_plus_global_value():
- """Функция. Обработка в цикле с вызовом глобальной функции и добавлением глобальной переменной"""
- new_lst = []
- for i in lst:
- new_lst.append(global_func(i))
- for v in new_lst:
- v + GLOBAL_VALUE
- ###
- @howlong
- def process_list_wo_func_plus_global_value():
- """Функция. Обработка в цикле без вызова внешних функций и добавлением глобальной переменной"""
- new_lst = []
- for i in lst:
- new_lst.append(i**2)
- for v in new_lst:
- v + GLOBAL_VALUE
- @howlong
- def process_list_wo_func_plus_local_value():
- """Функция. Обработка в цикле без вызова внешних функций и добавлением локальной переменной"""
- local_plus_value = GLOBAL_VALUE
- new_lst = []
- for i in lst:
- new_lst.append(i**2)
- for v in new_lst:
- v + local_plus_value
- @howlong
- def process_list_iterator_plus_global_value():
- """Функция. Обработка Генератором без вызова внешних функций и добавлением глобальной переменной"""
- new_lst = [i ** 2 for i in lst]
- for v in new_lst:
- v + GLOBAL_VALUE
- @howlong
- def process_list_iterator_plus_local_value():
- """Функция. Обработка Генератором без вызова внешних функций и добавлением локальной переменной"""
- local_plus_value = GLOBAL_VALUE
- new_lst = [i ** 2 for i in lst]
- for v in new_lst:
- v + local_plus_value
- @howlong
- def process_list_iterator_global_func_plus_global_value():
- """Функция. Обработка Генератором с вызовом глобальной функции и добавлением глобальной переменной"""
- new_lst = [global_func(i) for i in lst]
- for v in new_lst:
- v + GLOBAL_VALUE
- @howlong
- def process_list_iterator_local_func_plus_local_value():
- """Функция. Обработка Генератором с вызовом локальной функции и добавлением локальной переменной"""
- local_plus_value = GLOBAL_VALUE
- local_func = global_func
- new_lst = [local_func(i) for i in lst]
- for v in new_lst:
- v + local_plus_value
- ##
- @howlong
- def process_list_map_plus_local_value():
- """Функция. Обработка с использованием map и добавлением локальной переменной"""
- local_plus_value = GLOBAL_VALUE
- new_lst = map(lambda x : x**2, lst)
- for v in new_lst:
- v + local_plus_value
- @howlong
- def process_list_map_plus_global_value():
- """Функция. Обработка с использованием map и добавлением глобальной переменной"""
- new_lst = map(lambda x : x**2, lst)
- for v in new_lst:
- v + GLOBAL_VALUE
- @howlong
- def test_cls_method_add_global_value():
- """Класс. Обработка вызовом метода класса и добавлением глобальной переменной"""
- c1.cls_process_list_method_add_global_value()
- @howlong
- def test_cls_method_add_local_value():
- """Класс. Обработка вызовом метода класса и добавлением локальной переменной"""
- c2.cls_process_list_method_add_local_value()
- @howlong
- def test_cls_method_add_attr_value():
- """Класс. Обработка вызовом метода класса и добавление значения аттрибута"""
- c3.cls_process_list_method_add_attr_value()
- @howlong
- def test_cls_localfunc_add_global_value():
- """Класс. Обработка вызовом локальной функции и добавлением глобальной переменной"""
- c4.cls_process_list_local_func_add_global_value()
- @howlong
- def test_cls_localfunc_add_local_value():
- """Класс. Обработка вызовом локальной функции и добавлением локальной переменной"""
- c5.cls_process_list_local_func_add_local_value()
- @howlong
- def test_cls_localfunc_add_attr_value():
- """Класс. Обработка вызовом локальной функции и добавлением значения аттрибута"""
- c6.cls_process_list_local_func_add_attr_value()
- @howlong
- def test_cls_globalfunc_add_global_value():
- """Класс. Обработка вызовом глобальной функции и добавлением глобальной переменной"""
- c7.cls_process_list_global_func_add_global_value()
- @howlong
- def test_cls_globalfunc_add_local_value():
- """Класс. Обработка вызовом глобальной функции и добавлением локальной переменной"""
- c8.cls_process_list_global_func_add_local_value()
- @howlong
- def test_cls_globalfunc_add_attr_value():
- """Класс. Обработка вызовом глобальной функции и добавлением значения аттрибута"""
- c9.cls_process_list_global_func_add_attr_value()
- @howlong
- def test_cls_iterator_add_attr_value():
- """Класс. Обработка Генератором без вызова внешних функций и добавлением значения аттрибута"""
- c10.cls_process_iterator_add_attr()
- @howlong
- def test_cls_iterator_add_local_value():
- """Класс. Обработка Генератором без вызова внешних функций и добавлением локальной переменной"""
- c11.cls_process_iterator_add_local()
- @howlong
- def test_cls_iterator_add_global_value():
- """Класс. Обработка Генератором без вызова внешних функций и добавлением значения глобальной переменной"""
- c12.cls_process_iterator_add_global()
- tests = [
- process_list_global_func_plus_local_value,
- process_list_local_func_plus_local_value,
- process_list_wo_func_plus_local_value,
- process_list_iterator_plus_local_value,
- process_list_map_plus_local_value,
- process_list_global_func_plus_global_value,
- process_list_local_func_plus_global_value,
- process_list_wo_func_plus_global_value,
- process_list_iterator_plus_global_value,
- process_list_map_plus_global_value,
- process_list_iterator_global_func_plus_global_value,
- process_list_iterator_local_func_plus_local_value,
- ]
- tests2 = [
- test_cls_method_add_global_value,
- test_cls_method_add_local_value,
- test_cls_method_add_attr_value,
- test_cls_localfunc_add_global_value,
- test_cls_localfunc_add_local_value,
- test_cls_localfunc_add_attr_value,
- test_cls_globalfunc_add_global_value,
- test_cls_globalfunc_add_local_value,
- test_cls_globalfunc_add_attr_value,
- test_cls_iterator_add_attr_value,
- test_cls_iterator_add_local_value,
- test_cls_iterator_add_global_value,
- ]
- test(tests)
- test(tests2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement