Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python空闲调试器自变量_Python_Debugging_Python Idle - Fatal编程技术网

python空闲调试器自变量

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

是否有一些方法可以在调试时监视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):
        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],看起来很干净