python空闲调试器自变量
是否有一些方法可以在调试时监视self.{name}而不使用下面的额外行,并且是否有人知道如何省略self。在代码第4行之后的其他方法的主体部分,它会使它更具可读性吗python空闲调试器自变量,python,debugging,python-idle,Python,Debugging,Python Idle,是否有一些方法可以在调试时监视self.{name}而不使用下面的额外行,并且是否有人知道如何省略self。在代码第4行之后的其他方法的主体部分,它会使它更具可读性吗 class QuickFindUf(object): def __init__(self, n): self._id = [] for i in xrange(n): self._id.append(i) def connected(self, p, q
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
由于n稍后需要,请保存它。据我所见,在3.x中,init将self.\u id设置为rangen listrange10,因此可以压缩其余部分
def __init__(self, n):
self.n = n
self._id = range(n) # list(range(n)) in 3.x.
在任何情况下,在一个方法中只查找一次self属性,如在l=self.\u id中,然后使用直接尊敬,在这里,l是标准实践,而不是解决方法或调试的唯一方法。我将写信给工会如下:
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超出范围,你可以考虑该怎么做。您还有其他问题吗?对象没有名称,它们只有引用。此外,Python需要指定self。谢谢,self部分很明显,问题在于第4行之后的某种解决方法。顺便说一句,说得好,我已经在qn中添加了澄清。谢谢,特里。self的本地名称。\u id很好。关于范围,你是说我不需要xrange,因为我只创建了一次列表?我在某个地方读到过xrange是Python3.xP.S中的默认实现。我明白了,你的意思是3.x中的等价物只是愤怒和使用列表构造函数。对于加权版本的所有索引,我需要另一个值为1的列表,这样我就可以继续使用for循环。对于1的列表,3*[1]=[1,1,1],等等。哈,好的一个:谢谢,我可能会更改代码n*[1],看起来很干净