В настоящее время я использую python для работы с множеством данных, и мне стало немного любопытно... Поскольку у него много данных, скорость кода действительно имеет значение, так есть разница между несколькими утверждениями и функцией, которая делает это? есть ли разница между
def my_function(var1):
var2 = var1 + 1
var3 = var1 - 1
var4 = str(var1)
print(var2, var3, var4)
for i in range(100000):
my_function(i)
а также
for i in range(100000):
var1 = i
var2 = var1 + 1
var3 = var1 - 1
var4 = str(var1)
print(var2, var3, var4)
когда речь идет о быстром коде?
Скорее всего, это не повлияет на ваш код, если вы ничего не делаете внутри функции.
Проиллюстрировать:
In [1]: def spam(eggs):
...: pass
...:
...:
In [2]: def a():
...: for i in range(1000000):
...: spam(i)
...:
In [3]: def b():
...: for i in range(1000000):
...: pass
...:
In [4]: %timeit a()
104 ms ± 3.53 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [5]: %timeit b()
25.9 ms ± 871 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
Если, однако, код действительно что-то делает, вы больше не заметите разницу:
In [1]: def spam(eggs):
...: return sum(x for x in range(eggs))
...:
...:
In [2]: def a():
...: total = 0
...: for i in range(1000):
...: total += spam(i)
...:
In [3]: def b():
...: total = 0
...: for i in range(1000):
...: total += sum(x for x in range(i))
...:
In [4]: %timeit a()
31 ms ± 1.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [5]: %timeit b()
31.8 ms ± 1.51 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Также: преждевременная оптимизация - это корень всего зла - DonaldKnuth
Когда это интерпретируется там небольшая разница, но она зависит от размера функции, сколько раз она называется, что она делает и т.д.
Для скомпилированного кода Python компилятор обычно достаточно умен, чтобы "разворачивать" функции в своих компонентах для оптимизации.
numpy
timeit
?