itertools.repeat
類用C編寫,比使用Python編寫的函數要快一些。下面是一些測試中,我用不同的恆定值函數的實現一樣,使用timeit
模塊:
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17)
[MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import timeit
>>> import itertools
>>> itertools_version = itertools.repeat(10).__next__
>>> lambda_version = lambda:10
>>> def function_version():
return 10
>>> def constant_factory(n):
return itertools.repeat(n).__next__
>>> factory_version = constant_factory(10)
>>> timeit.timeit("for i in range(100): f()",
setup="from __main__ import itertools_version as f")
7.115707915662512
>>> timeit.timeit("for i in range(100): f()",
setup="from __main__ import lambda_version as f")
11.479014911317307
>>> timeit.timeit("for i in range(100): f()",
setup="from __main__ import function_version as f")
11.561433023257619
>>> timeit.timeit("for i in range(100): f()",
setup="from __main__ import factory_version as f")
7.166709032038568
但是,仔細一想,如果這個小小的性能提升是值得的,您的情況。如果這不是性能至關重要的代碼,那麼當您稍後閱讀時,應該使用您認爲最容易理解的實現。
如果你只打算使用常量函數一次,我認爲lambda會非常合適。如果這是您經常使用的東西,則命名函數可能會更好。如果它在某些最具時間敏感性的邏輯的內部循環中被調用,則使用一個itertools.repeat
對象的綁定方法。
python 3.5的[documentation](https://docs.python.org/3.5/library/collections.html#defaultdict-examples)使用'lambda'。 – Alexey 2016-03-24 08:03:38