我有时间戳的记录
timestamp = time.time()
timestamps[random_element] = timestamp
通常现在字典会在被问到时返回时间戳,但是,我希望它返回自时间戳以来的时间量。所以当我执行以下命令时:
timestamps[random_element]
我想得到
time.time() - timestamp
而不仅仅是
timestamp
注意,我宁愿避免声明和引用新函数。在我看来,仅仅用一个减法调用一个函数是巨大的浪费。你知道吗
编辑: 正如coldspeed和DeepSpace所指出的,子类化实际上比较慢(大约30%),似乎与字典大小和对字典的调用量无关。这可能有点离题,但我想知道为什么会这样。欣赏这些见解
time() - timestamps[randint(0,9)]: 10.2322190305
subclassed_timestamps[randint(0,9)]: 13.268092648
子类dict如下:
class MyDict(dict):
def __getitem__(self, key):
return time() - dict.__getitem__(self, key)
编辑2:
Lambda函数就是我要找的。明显快于子类化,不幸的是慢于time()-timestamps[element],但它实现了我想要的。你知道吗
代码:
for i in range(10000):
normal_dict[i]= time()
subclassed_dict[i] = time()
lambda_dict[i] = (lambda x,y: x - y, time())
sleep(0.002)
def normal_d():
for i in range(1000):
x = time() - normal_dict[555]
def subclassed_d():
for i in range(1000):
x = subclassed_dict[555]
def lambda_d():
for i in range(1000):
x = lambda_dict[555][0](lambda_dict[555][1])
print "lambda_timestamps[randint(0,9)]: {}".format(timeit(lambda_d, number=10000))
print "time() - timestamps[randint(0,9)]: {}".format(timeit(normal_d, number=10000))
print "subclassed_timestamps[randint(0,9)]: {}".format(timeit(subclassed_d, number=10000))
与子类化相比,这始终将lambda作为一个更快的选项来提供解决方案。你知道吗
lambda_timestamps[randint(0,9)]: 2.19382280125
time() - timestamps[randint(0,9)]: 0.962934452287
subclassed_timestamps[randint(0,9)]: 3.92690390754
使用存储在时间戳旁边的lambda函数是我想要的。请理解,这不是一个实际的需要,只是一个任意的目标,即在不使用1)每次显式减法和2)不使用单独的命名函数的情况下获得经过的时间。你知道吗
我理解这会损害可读性,但这是一个纯粹的理论问题,不是为了实际应用,所以这不是一个问题。我只是在探索Python:)
相关问题 更多 >
编程相关推荐