2010-06-30 13 views
6

Python'da, yerel kapsamlı bir değişkene bakmanın, global bir kapsam değişkenine bakmaktan çok daha hızlı olduğunu biliyorum. Yani: Ben bir öznitelik ve bir yöntem ile, bir sınıf tanımının baktığınızdaPython: Bir yöntem içinde sınıf özellikleri yerel değişkenlere eşdeğer midir?

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

Yani daha yavaş

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

mi:

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 kullanımım mı benim ilk veya ikinci fonksiyonum gibi mi? Classy alt sınıfını kullanmam ve alt sınıfımdaki bir yöntemden özniteliğe2 erişmeyi denememe ne dersiniz?

cevap

4

Yerel olarak kapsamlandırılmış değişkenler hızlıdır, çünkü yorumcunun sözlük araması yapması gerekmez. Derleme zamanında tam olarak ne kadar yerel değişken olacağını bilir ve onlara bir dizi olarak erişmek için talimatlar oluşturur.

Üye öznitelikleri, bir sözlük araması gerektirir; böylece, global kapsamlı değişkenler kullanılarak ilk örneğinize benzer şekilde çalışırlar. Yerel bir değişkene özellik1 gölgeler

attribute1 = self.attribute1 
# do stuff with attribute1 

, yani sadece tek bir sözlük arama gereklidir:

hız, aşağıdaki gibi bir şey yapabilirsiniz. Yine de, bir yöntemin bir darboğaz olduğunu belirten bir profil yapmazsam rahatsız olmazdım.

+0

Genelde bu sorunun cevabını merak etmekteyken, sormamın asıl sebebi, neredeyse sadece bir yöntemle kullanılabilecek bir dizi sabitime sahip olmama neden olmuştu, Onları bu yöntem içerisinde veya init içinde tanımlayın (daha sonra başka bir yerden erişilmesi gerektiğini fark ettiğimde). Bu olasılık uzak olduğu için, onları yöntemde tanımlayacağım. Teşekkürler. – Wilduck

İlgili konular