【发布时间】:2019-03-24 11:00:52
【问题描述】:
出于好奇,在没有第二个参数的情况下调用以下函数时,什么更有效?使用 if 语句:
def f(elements, l=None):
for el in elements:
...
if l:
el = l(el)
...
还是使用 lambda?
def f(elements, l=lambda x: x):
for el in elements:
...
el = l(el)
...
无论如何我都会使用第二个变体,因为当提供了函数参数时,但我仍然对仅使用默认值运行时哪个更有效。
【问题讨论】:
-
我觉得第一个变体更具可读性(文档也会看起来更好)。如果您担心效率,您可以随时将
if语句放在循环之前(外部)......比较例如与标准库中的sorted具有完全相同的接口。 -
running
%timeit明显的赢家是带有 if 语句的人 -
@user3496846 我在pycharm附带的pydevcosole中,我刚刚意识到我不知道如何检查我拥有的python 3.6的味道,我认为它是cpython
-
除了效率问题之外,OP 的第二种方法存在第一种方法没有的弱点:第一种方法将正常工作,无论您是否通过
None,或者不通过任何东西所有,作为第二个论点。如果将None作为第二个参数传递,则第二种方法将失败,虽然这是一个编程错误,但很可能是这样。 -
第二个版本效率更高。
标签: python performance optimization