Отладчик Python IDLE

Есть ли способ контролировать себя.{Имя} во время отладки без дополнительной строки ниже, а также есть ли у кого-то идея (хорошая практика), как опустить себя. часть в коде (после строки 4 в теле других методов), это сделает его более читабельным?

class QuickFindUf(object):

    def __init__(self, n):
        self._id = []

        for i in xrange(n):
            self._id.append(i)

    def connected(self, p, q):
        return self._id[p] == self._id[q]

    def union(self, p, q):
        pid = self._id[p]
        qid = self._id[q]

        l = self._id # debug only

        for i in xrange(len(self._id)):
            if self._id[i] == pid: 
                self._id[i] = qid

1 ответ

Решение

Так как нужно позже, сохраните его. Насколько я вижу, __init__ устанавливает для self._id значение range(n) (list(range(10) в 3.x), поэтому все остальное можно сжать.

def __init__(self, n):
    self.n = n
    self._id = range(n)  # list(range(n)) in 3.x.

В любом случае, поиск атрибута self только один раз в методе, как в l = self._id и, используя прямое почтение, здесь, в дальнейшем, это стандартная практика, а не обходной путь или вещь только для отладки. Я бы написал объединение следующим образом:

def union(self, p, q):
    l = self._id
    pid = l[p]
    qid = l[q]
    for i in xrange(n):
        if l[i] == pid: 
            l[i] = qid

Вы можете подумать, что делать, если p или q находятся вне диапазона. У вас есть другой вопрос?

Другие вопросы по тегам