Я использую 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__
для имени пользователя. Если он существует и является дескриптором данных, вернуть результат дескриптора. Поиск по всем базам 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()