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,这又会怎样呢?
1 个回答
4
局部变量运行得很快,因为解释器不需要去查找字典。它在编译时就知道会有多少个局部变量,并且会生成指令像访问数组一样来访问这些变量。
成员属性需要查字典,所以它们的执行方式和你第一个例子中使用全局变量的方式类似。
为了提高速度,你可以这样做:
attribute1 = self.attribute1
# do stuff with attribute1
这样做会在局部变量中覆盖attribute1,这样只需要查一次字典。我不会随便这样做,除非我通过性能分析发现某个方法是瓶颈。