Python.use(better) #list: step13 -- def __delitem__
‖記事一覧‖ Python.use(better)《Python3.1》
def __delitem__
《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
事例:モジュールを起動する
■ 全項目を確認する
全ステップの「項目」を確認するには、関数 do を利用します。
$ python myList.py >>> do() ... 13: step13 -- def __delitem__(self, key)
■ 各項目を実行する
各ステップの「動作」を確認するには、関数 do の実引数を指定します。
>>> do(13) ... >>> # ---------------------------------------- __delitem__ >>> s = myList("ABC"); s, len(s) (['A', 'B', 'C'], 3) >>> del s[0]; s, len(s) (['B', 'C'], 2) >>> s = myList("ABC"); s, len(s) (['A', 'B', 'C'], 3) >>> del s[1]; s, len(s) (['A', 'C'], 2) >>> s = myList("ABC"); s, len(s) (['A', 'B', 'C'], 3) >>> del s[2]; s, len(s) (['A', 'B'], 2) >>> s = myList("ABC"); s, len(s) (['A', 'B', 'C'], 3) >>> del s[3]; s, len(s) IndexError: myList assignment index out of range >>>
事例:コードの解説
def step13(): """def __delitem__(self, key)""" class myList(object): ... def __delitem__(self, key): prev,node = self.head,self.head.next n = 0 while node: if n==key: prev.next = node.next; del node break prev,node = node,node.next n += 1 else: s = "IndexError: {0} assignment index out of range" name = self.__class__.__name__ raise IndexError(s.format(name)) ## ---------------------------------------- global dirs; local = locals() dirs += "__delitem__", for e in dirs: print(">>> #","-"*40,e) eval("ex_%s(SPEC, local)"%e)
■ #1: 要素の削除
メソッド __delitem__ は、del 文に呼応して、任意の要素を削除します。
def __delitem__(self, key): prev,node = self.head,self.head.next n = 0 while node: if n==key: prev.next = node.next; del node break prev,node = node,node.next n += 1 else: s = "IndexError: {0} assignment index out of range" name = self.__class__.__name__ raise IndexError(s.format(name))
連結リスト self の各ノード node を順にたどりながら、
- 変数 n(カウンター)が引数 key と同値なら、
- ノード node を削除します。
引数 key と同値のものが見つからないなら、
- 例外 IndexError を生成するとともに、
- クラスの名前 __class__.__name__ を含むエラーメッセージを出力します。
》こちらに移動中です《
↑TOP