Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';这是python背后的诀窍';有什么()函数吗?_Python_Performance - Fatal编程技术网

什么';这是python背后的诀窍';有什么()函数吗?

什么';这是python背后的诀窍';有什么()函数吗?,python,performance,Python,Performance,其中一个共享的thisany()函数技巧;原因是循环是用C语言编写的 有人能解释一下吗?它背后的诀窍是什么?还有其他用例吗 >>> import itertools, hashlib, time >>> _md5 = hashlib.md5() >>> def run(): ... for i in itertools.repeat('foo', 10000000): ... _md5.update(i) ... >>

其中一个共享的this
any()
函数技巧;原因是循环是用C语言编写的

有人能解释一下吗?它背后的诀窍是什么?还有其他用例吗

>>> import itertools, hashlib, time
>>> _md5 = hashlib.md5()
>>> def run():
...   for i in itertools.repeat('foo', 10000000):
...     _md5.update(i)
... 
>>> a = time.time(); run(); time.time() -a
3.9815599918365479
>>> _md5 = hashlib.md5()
>>> def run():
...   any(itertools.imap(_md5.update, itertools.repeat('foo', 10000000)))
... 
>>> a = time.time(); run(); time.time() -a
2.1475138664245605
>>> 

本质上没有“把戏”

itertools.imap创建一个惰性列表,其中包含要计算的函数(md5)及其参数('foo'字符串)。md5调用在这一点上没有进行评估,而是与它们的参数一起准备(我认为它们被称为thunks)。然后,当您将此迭代器传递给任何函数时,它将遍历所有对其求值的元素。这比第一个程序的显式Python计算要快,因为
any
是用C实现的,所有事情都发生在C库代码中,而无需在每个迭代器元素之后返回解释器。

如果您发布了一个视频链接,可能会出现重复问题。您不需要
any
,事实上,
过滤器(_md5.update,itertools.repeat('foo',10000000))
会更快。@tomasz你能告诉我为什么更快吗?