gpt4 book ai didi

python - 将分配分成两行仍然有效吗?

转载 作者:太空狗 更新时间:2023-10-29 20:23:30 24 4
gpt4 key购买 nike

从 python 的运行时效率角度来看,这些是否同样有效?

x = foo()
x = bar(x)

对比

x = bar(foo())

我有一个更复杂的问题,基本上可以归结为这个问题:显然,从代码长度的角度来看,第二种效率更高,但运行时是否也更好?如果不是,为什么不呢?

最佳答案

这是一个比较:

第一种情况:

%%timeit
def foo():
return "foo"

def bar(text):
return text + "bar"

def test():
x = foo()
y = bar(x)
return y

test()
#Output:
'foobar'
529 ns ± 114 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

第二种情况:

%%timeit

def foo():
return "foo"

def bar(text):
return text + "bar"

def test():
x = bar(foo())
return x

test()
#Output:
'foobar'
447 ns ± 34.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

但这只是针对每种情况运行一次 %%timeit 的比较。以下是每种情况下 20 次迭代(以 ns 为单位的时间)的时间:

df = pd.DataFrame({'First Case(time in ns)': [623,828,634,668,715,659,703,687,614,623,697,634,686,822,671,894,752,742,721,742], 
'Second Case(time in ns)': [901,786,686,670,677,683,685,638,628,670,695,657,698,707,726,796,868,703,609,852]})

df.plot(kind='density', figsize=(8,8))

enter image description here

据观察,随着每次迭代,差异都在缩小。此图显示性能差异并不显着。从可读性的角度来看,第二种情况看起来更好。

在第一种情况下,计算了两个表达式:第一个表达式首先将 foo() 的返回值赋给 x,然后第二个表达式调用 bar() 在该值上。这增加了一些开销。在第二种情况下,只评估一个表达式,同时调用两个函数并返回值。

关于python - 将分配分成两行仍然有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55832974/

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