(Python3)是多次访问字典更好,还是有项目值的参考更好?

2024-04-26 15:03:25 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:

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

我们这里有一些字典本身的访问权。连接基因,项目存储在键中 自我连接基因[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

1条回答
网友
1楼 · 发布于 2024-04-26 15:03:25

访问dict时,每次都会产生哈希/查找开销。如果要在同一代码块中多次使用同一个键,则重复查找同一个键是浪费周期。将结果存储在变量中会更快更干净

相关问题 更多 >