簡體   English   中英

python的any()函數背后的訣竅是什么?

[英]what's the trick behind python's any() function?

其中一個pycon2011會話分享了這個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庫代碼中,而不會在每個迭代器元素之后返回到解釋器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM