gpt4 book ai didi

python - 如何定义常量函数

转载 作者:行者123 更新时间:2023-11-28 16:44:27 25 4
gpt4 key购买 nike

documentation我找到了

The function int() which always returns zero is just a special case of constant functions. A faster and more flexible way to create constant functions is to use itertools.repeat() which can supply any constant value (not just zero):

def constant_factory(value): 
return itertools.repeat(value).next

d = defaultdict(constant_factory('<missing>'))
d.update(name='John', action='ran')
'%(name)s %(action)s to %(object)s' % d

'John ran to <missing>'

为什么不简单地使用 lambda 函数来获取常量函数?

最佳答案

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 对象的绑定(bind)方法。

关于python - 如何定义常量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com