2014-04-26 43 views
0

我有以下的例子中的Python:Python函数是否将输入参数复制到函数中?

import numpy as np 
import timeit 

# array size 
m = 3000 

# square array 
a = np.random.rand(m, m) 

# column vector 
b = np.random.rand(m) 

# solve 
ti = timeit.default_timer() 
x = np.linalg.solve(a, b) 
tf = timeit.default_timer() 

# solve function 
def solver(a, b): 
    x = np.linalg.solve(a, b) 
    return x 

tii = timeit.default_timer() 
x = solver(a, b) 
tff = timeit.default_timer() 

print('time1 ', tf-ti) 
print('time2 ', tff-tii) 

不使用的功能(时间1)VS使用函数(时间2)的时间的比较是:

time1 0.6199771239989786 
time2 0.5945519460001378 

似乎有被轻微两种方法之间的区别。输入参数如何处理函数solver,它们是否被复制或者它们是否传递给函数的内部?

+1

如果按相反顺序运行测试,时间会发生什么变化? – AShelly

+0

@ashelly很有趣,如果我按照相反的顺序运行测试时间切换 – wigging

+0

哦,是的,没有额外的函数调用它是慢的;-)当然,在第一次调用之前,有一些初始化要完成。 – Daniel

回答

1

速度差异很可能是由于ab的内容的一些内存缓存,第二次调用linalg.solve利用了。

为了回答这个问题,python中的对象是通过引用传递的,所以传递参数的代价的唯一区别就是你在第二个例子中做了两次。但这可能只是解决成本的一小部分。

+0

我期望在这里的火焰:) :) – pepr

+0

因此,对于较大的项目,将数据传递给在另一个文件中声明的函数应该不会对整个计算时间产生负面影响,而不会对相同文件中的所有内容做出反应? – wigging

+0

@Gavin这是正确的。 – Veedrac