2010-06-30 28 views
6

在python中,我知道查找本地作用域變量比查找全局作用域變量要快得多。所以:Python:類方法中的類屬性是否等價於局部變量?

a = 4 
def function() 
    for x in range(10000): 
     <do something with 'a'> 

慢於

def function() 
    a = 4 
    for x in range(10000): 
     <do something with 'a'> 

所以,當我看到一個類定義,屬性和方法:

class Classy(object): 
    def __init__(self, attribute1): 
     self.attribute1 = attribute1 
     self.attribute2 = 4 
    def method(self): 
     for x in range(10000): 
      <do something with self.attribute1 and self.attribute2> 

是我使用self.attribute的更喜歡我的第一個或第二個功能?如果我分類Classy,並嘗試從我的子類中的方法訪問attribute2呢?

回答

4

本地作用域變量很快,因爲解釋程序不需要執行字典查找。它在編譯時知道有多少局部變量會存在,並創建指令以數組的形式訪問它們。

成員屬性需要字典查找,因此它們的執行類似於使用全局作用域變量的第一個示例。

對於速度,你可以這樣做:

attribute1 = self.attribute1 
# do stuff with attribute1 

其陰影ATTRIBUTE1在一個局部變量,所以只需要一個字典查找。儘管如此,除非我做了一些表明某種方法是瓶頸的分析,否則我不會打擾。

+0

雖然我一般對這個問題的答案很好奇,但是我問這個問題的真正原因是因爲我有一些常量幾乎肯定會被一種方法使用,我不確定我是否應該在該方法內或在init內定義它們(以防我後來意識到它們需要在別處訪問)。由於這種可能性很小,我想我會在方法中對它們進行定義。謝謝。 – Wilduck 2010-06-30 16:13:06

相關問題