Вот сравнение:
Первый случай :
%%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 итераций (время в нс) для каждого случая:
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](https://i.stack.imgur.com/mhYgp.jpg)
Было замечено,с каждой итерацией различия уменьшались.Этот график показывает, что разница в производительности незначительна .С точки зрения читабельности второй случай выглядит лучше.
В первом случае вычисляются два выражения: первое выражение присваивает возвращаемое значение сначала от foo()
до x
, а затем второе выражение вызывает bar()
для этого значения.Это добавляет некоторые накладные расходы.Во втором случае вычисляется только одно выражение, вызывающее обе функции одновременно и возвращающее значение.