Так, например:
if(self._ConnectGenes[innov_num].is_enabled() and self._ConnectGenes[innov_num].is_computed()==False):
self._NodeGenes[self._ConnectGenes[innov_num]._Out].value += self._NodeGenes[next] * self._ConnectGenes[innov_num]._Weight
self._ConnectGenes[innov_num].set_computed(True)
queue.append(self._ConnectGenes[innov_num]._Out) #Append the next skirt to the graph
Здесь у нас есть несколько обращений к словарю self._ConnectGenes, и элемент хранится под ключом self._ConnectGenes [Innov_num]
Я интересно, было бы лучше, если бы у нас была ссылка на этот элемент, например,
genome = self._ConnectGenes[innov_num]
if(genome.is_enabled() and genome.is_computed()==False):
self._NodeGenes[genome._Out].value += self._NodeGenes[next] * genome._Weight
genome.set_computed(True)
queue.append(genome._Out) #Append the next skirt to the graph
Сэкономит ли это производительность? Поскольку этот фрагмент кода будет вызываться много раз.
Решение:
эксперимент:
import time
#----Preparation
access_dict = {"num":4}
#----Timing
start = time.time()
for i in range(100000000):
access_dict["num"] = access_dict["num"] +1
end = time.time()
print("Dict access",end - start)
#----Timing
start = time.time()
for i in range(100000000):
access_dict["num"] +=1
end = time.time()
print("Dict access2",end - start)
#----Timing
start = time.time()
ref = access_dict["num"]
for i in range(100000000):
ref = ref +1
end = time.time()
print("Ref access",end - start)
#----Timing
start = time.time()
ref = access_dict["num"]
for i in range(100000000):
ref += 1
end = time.time()
print("Ref access2",end - start)
Вывод:
Dict access 7.079166889190674
Dict access2 6.49668288230896
Ref access 5.318424224853516
Ref access2 5.393644332885742