Отладчик 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 находятся вне диапазона. У вас есть другой вопрос?