2016-08-14 1 views
0

Я наткнулся на что-то, что не имеет смысла. У меня есть этот код python, который делает 2 простых for-loops и просто измеряет время выполнения. Однако я обнаружил, что тот же самый код, вызванный функцией, занимает половину времени. Может кто-нибудь объяснить, почему?Python различной производительности для идентичного кода

print "no function" 

start_time = time.time() 
for i in range(10000): 
    for j in range(10000): 
     z = i*j 
print z 
print("--- %s seconds ---" % (time.time() - start_time)) 

# VS 

def Function(): 
    start_time = time.time() 
    for i in range(10000): 
     for j in range(10000): 
      z = i*j 
    print z 
    print("--- %s seconds ---" % (time.time() - start_time)) 

print "Function Call" 
Function() 

А вот выход:

no function 
99980001 
--- 8.89359378815 seconds --- 
Function Call 
99980001 
--- 4.64798092842 seconds --- 
+0

Без тестирования и принятия необдуманного предположения я бы сказал, что локальные локаторы намного быстрее, чем глобальные, потому что они могут быть несколько оптимизированы (с использованием индекса, а не имени). –

+0

Разница заключается в объеме переменных и их времени поиска. –

+0

Вы оба правы, по-видимому, здесь уже был задан вопрос. Http://stackoverflow.com/questions/11241523/why-does-python-code-run-faster-in-a-функция – Alex

ответ

1

Из PythonInSpeed website мы можем прочитать:

В функции, локальные переменные доступны быстрее глобальных переменных, встроенных команд и атрибутов поиск. Таким образом, иногда стоит локализовать доступ переменной во внутренних циклах. Например, код для random.shuffle() локализует доступ с помощью строки random = self.random. Это сохраняет цикл перетасовки от необходимости повторного поиска self.random. Вне циклов выигрыш минимален и редко стоит того.

Смежные вопросы