2016-08-14 103 views
0

我偶然发现了一些毫无意义的东西。我有这个Python代码,它可以做2个简单的for-loops,并且只是测量执行时间。但是,我发现从一个函数调用完全相同的代码需要一半的时间。有人能解释为什么吗?相同代码的Python不同性能

print "no function" 

start_time = time.time() 
for i in range(10000): 
    for j in range(10000): 
     z = i*j 
print z 
print("--- %s seconds ---" % (time.time() - start_time)) 

# VS 

def Function(): 
    start_time = time.time() 
    for i in range(10000): 
     for j in range(10000): 
      z = i*j 
    print z 
    print("--- %s seconds ---" % (time.time() - start_time)) 

print "Function Call" 
Function() 

这里是输出:

no function 
99980001 
--- 8.89359378815 seconds --- 
Function Call 
99980001 
--- 4.64798092842 seconds --- 
+0

如果没有测试并且没有受过教育的猜测,我会说接触当地人要比全局更快,因为他们可以有些优化(通过索引而不是名字进行处理)。 –

+0

区别在于变量的范围和查找时间。 –

+0

你是对的,显然这个问题已经在这里得到解答了http://stackoverflow.com/questions/11241523/why-does-python-code-run-faster-in-a-function – Alex

回答

1

PythonInSpeed website我们可以看到这一点:

在功能,局部变量比全局变量,建宏和属性访问更快速查找。所以,有时候值得在内部循环中对变量访问进行本地化。例如,random.shuffle()的代码使用random = self.random这一行本地化访问。这样可以避免重复查找self.random。在循环之外,增益很小,很少值得。

相关问题