Python разница между оператором и функцией

1

В настоящее время я использую 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)

когда речь идет о быстром коде?

  • 0
    Может иметь небольшую разницу, но не думайте, что вы вызываете «оптимизацию» своего кода для удаления функции. Если вы выполняете математические операции с большим количеством кода, определенно не следует использовать цикл for, а лучше использовать библиотеку, такую как numpy
  • 1
    Почему бы тебе не timeit ?
Показать ещё 3 комментария
Теги:
performance

2 ответа

1

Скорее всего, это не повлияет на ваш код, если вы ничего не делаете внутри функции.

Проиллюстрировать:

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

0

Когда это интерпретируется там небольшая разница, но она зависит от размера функции, сколько раз она называется, что она делает и т.д.

Для скомпилированного кода Python компилятор обычно достаточно умен, чтобы "разворачивать" функции в своих компонентах для оптимизации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню