import os, time
from random import randint
class ob():
def __init__(self, (x,y)):
self.xy = (x,y)
def render(self):
(x, y) = self.xy # some load
x*x # some load
def renderGlobal(self):
(x, y) = self.xy # some load
x*x # some load
if __name__ == '__main__':
npc_list = []
i = 0
while i < 1000:
npc = ob((randint(1,100), randint(1,100)))
npc_list.append(npc)
i += 1
obr = ob.render
for case in [0,1,2,3]:
if case == 0:
t = time.time()
print "case 0: classic FOR loop"
for n in npc_list:
n.render()
print "Time taken:", time.time() - t
if case == 1:
t = time.time()
print "case 1: loop using map()"
map(renderGlobal, npc_list)
print "Time taken:", time.time() - t
if case == 2:
t = time.time()
print "case 2: loop using map()"
map(ob.render, npc_list)
print "Time taken:", time.time() - t
if case == 3:
t = time.time()
print "case 3: loop using map()"
map(obr, npc_list)
print "Time taken:", time.time() - t
case 0: classic FOR loop
Time taken: 0.000545978546143
case 1: loop using map()
Time taken: 0.000361204147339
case 2: loop using map()
Time taken: 0.00108885765076
case 3: loop using map()
Time taken: 0.00101208686829
a) почему case 2,3(map()) медленнее case 0 (for)
b) почему case 1(map()) так отрывается вперёд от case 2,3(map()), ведь в case 1 исползуется глобальная функция.
Вообще-то я думал что эффект наличия точек не сильно сказуется на работе map() функции. case 2 и case 3 вродебы подтверждают это практически, однако почему case 1 быстрее, и даже обычный for даёт фору некоторым map(), немогу разобрать.
Очень хотелось бы разобраться для понимания.
За помощь зараннее благодарю.