每个函数调用都重新初始化python函数中的变量吗?
假设我有两个功能
def myfunction1(number):
biglist = [1,2,3,4,5,6,7,8,9]
print number*biglist
biglist = [1,2,3,4,5,6,7,8,9]
def myfunction2(number, biglist):
print number*biglist
我用ipython的魔法%timeit计时:
In [5]: %timeit myfunction2(number, biglist)
1000000 loops, best of 3: 607 ns per loop
In [6]: %timeit myfunction1(number)
1000000 loops, best of 3: 841 ns per loop
这是否意味着每次调用myfunction1时都会重新声明biglist
变量?我猜想在第一次函数调用之后,Python会以某种方式将biglist
变量与函数一起存储,这样每次调用函数时都不必重新初始化列表。
我不知道Python的内部工作方式,所以我只是在猜测。有人能解释实际发生了什么吗?
没有找到相关结果
已邀请:
3 个回复
穗揣
两次我希望x在我键入之后就是3而不管我在x之间做了什么...这真的没什么不同 说明 - 这个功能很容易
在这种情况下,你想重新分配biglist。 这个过程忽略了这样一个事实,即每次调用biglist都是一个不同的变量 - 你可以让这个func同时在2个线程上执行,并且它们是无关的
绊伦欧
徘廷
...然而,在函数范围内声明它意味着它每次都重新创建。所以,例如:
每次调用该函数时,您都会获得一份清新,干净,无瑕疵的列表副本。 那么你如何才能获得两全其美?试试这个:
您可以看到全局范围列表未更改。基于此方法的新功能将是:
如何使用您的基准时间进行比较?我知道在这种情况下你实际上并没有修改你的函数中的“biglist”,但是如果你必须拥有共享的全局数据,并且这个列表只是从头开始构建,那么习惯使用它并不是一个糟糕的范例。一次(然后复制)可能会带来一些性能改进。