[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум Panda3D - по русски » Общий форум » Python » Использование .self (Нюансы. Автоликбез.)
Использование .self
DancingOxДата: Четверг, 15.03.2012, 13:14 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
Я сейчас напишу очевидные вещи, но если я в чём-то буду не прав, поправьте меня. Всегда замечал, что при редактировании классов в моём коде слишком часто используется .self, а когда узнал, что обращение к атрибутам/методам класса производится как обращение к словарю по ключу-имени атрибута/метода, решил максимально возможно сократить использование этой медленной конструкции.
Например, такой код
Code

from numpy import zeros
from random import random

class MyClass():
      
     def __init__(self):
          
         self.count = 10
          
         self.values = zeros((self.count, self.count), float)
          
         for i in range(self.count):
             for j in range(self.count):
                 self.values[i][j] = random()
      
     def edit(self):
          
         for i in range(self.count):
             for j in range(self.count):
                 if i==j: self.values[i][j] = 0
                 else: self.values[i][j] = 1

следует исправить так:
Code

from numpy import zeros
from random import random

class MyClass():
      
     def __init__(self):
          
         count = self.count = 3
         values = zeros((count, count), float)
          
         for i in range(count):
             for j in range(count):
                 values[i][j] = random()
          
         self.values = values
      
     def edit(self):
          
         values = self.values
         count = self.count  
          
         for i in range(count):
             for j in range(count):
                 if i==j: values[i][j] = 0
                 else: values[i][j] = 1
 
ninthДата: Четверг, 15.03.2012, 13:49 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
В общем верно. Но смотреть по ситуации надо - в больших циклах, например это имеет смысл, а вот просто та лишний раз создавать переменную - не всегда. Кстати это касается не только self, такой же финт можно делать с методами других классов или функциями модулей. Но, ещё раз повторюсь что оно имеет смысл только в случае тяжелых вычислений.
 
Форум Panda3D - по русски » Общий форум » Python » Использование .self (Нюансы. Автоликбез.)
Страница 1 из 11
Поиск: