python - 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)
在谈论代码有多快时?
解决方案
它很可能不会对您的代码产生任何可衡量的影响,除非您在函数内部几乎没有做任何事情。
为了显示:
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
推荐阅读
- kotlin - 为什么kotlin中两个可变映射的总和是一个映射
- excel - 两个表格之间的自动过滤复制粘贴循环永远循环并返回空白单元格
- java - 查找实现泛型接口的类的类型
- excel - 将文本文件转换为 excel 文件
- rust - Rust 引用 Vec 的当前函数错误所拥有的数据
- javascript - TypeError:null 不是对象(评估'b.body') - Highcharts/wkhtmltopdf
- ubuntu - 开始机器恢复之旅时出现 ubuntu 错误
- aframe - A-Frame:如果没有与孩子相交,则触发父母的 raycaster-intersected-cleared
- javascript - 从失败的承诺中“恢复”的正确方法?
- autodesk-forge - DWF 彩色但 SVF 黑色