我在课堂上的艰难循环中使用numpy.random.normal
函数。
class MyClass(MyBaseClass):
def run(self):
while True:
...
self.L.append(numpy.random.normal(0,1))
我知道在 Python 中使用多个查找非常慢。其中numpy.random.normal
有 3 次查找:首先numpy
是查找,然后是random
,然后是normal
。
所以我决定通过分配numpy.random.normal
一个局部变量来解决这个问题_normal
。
开始了:
class MyClass(MyBaseClass):
_normal = numpy.random.normal
def run(self):
while True:
...
self.L.append(MyClass._normal(0,1))
我真正关心的是描述符。当访问类中的变量时,会在所有基类中查找具有相同名称的数据描述符。它在这里描述:
检查
objectname.__class__.__dict__
attrname。如果存在并且是数据描述符,则返回描述符结果。objectname.__class__
搜索同一案例的所有基地。
所以,我想,如果我_normal
像上面那样放入本地空间,它将查找数据描述符的所有基类。我担心它会成为经济放缓的根源。
我的担忧是否合理?
我是否应该担心在基类中查找描述符所需的时间?
当在类中使用位于模块深处的函数时,是否有更好的方法来加速对其的访问?
在对答案的评论中进行了讨论。
我决定提供一些看起来很重要的额外实施细节(对于我的特殊情况)。
实际上,代码更接近于此(非常非常简化):
class MyClass(MyBaseClass):
def __iter__(self):
return self
def next(self):
self.L.append(numpy.random.normal(0,1))
def run(self):
while True:
self.next()