首页 > 解决方案 > Python语句和函数的区别

问题描述

我目前正在使用 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)

在谈论代码有多快时?

标签: pythonperformance

解决方案


它很可能不会对您的代码产生任何可衡量的影响,除非您在函数内部几乎没有做任何事情。

为了显示:

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


推荐阅读