2017-12-09 5 views
0

下記の余分な行を使わずにデバッグ中にself {name}を監視する方法はありますか?また誰かが自己を省略する方法(良い習慣)を持っていますか?コードの一部(他のメソッドの本体の4行目以降)では、読みやすくなります。python IDLEデバッガ自己変数

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 
+0

Ob jectsは名前を持たず、参照のみを持っています。さらに、Pythonではselfを指定する必要があります。 – Ssein

+0

ありがとう、自己の部分は明白ですが、問題は4行目以降の回避策です。とにかく良い点、私はqnの説明を追加しました。 –

答えて

1

nは後で必要になるため、保存してください。私の知る限り見ることができるように、__init__セットは(N)の範囲とするself._id(リスト(範囲(10)3.xので)ので、残りは凝縮することができる。いずれの場合においても

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

を、ルックアップ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が範囲外である場合の対処方法については、他の質問がありますか?

+0

ありがとう、テリー。 self._idのローカル名は良いです。範囲については、リストを1回作成してからxrangeが必要ないということですか?私はxrangeがPython 3.xのデフォルトの実装であることをどこかに読んだ。 –

+0

P.S.私はそれを持っている、あなたは3.xの等価物がちょうど怒りであり、リストコンストラクタを使用することを意味します。重み付きバージョンのすべてのインデックスに値1の別のリストが必要なので、forループを使用してください。 –

+1

1、 '3 * [1] == [1,1,1]'などのリストについては、 –

関連する問題