《29》連結:メソッド extend〈Python 2.x 版〉
実録:はじめてのプログラミング《記事一覧》
《29》連結:メソッド extend
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年2月23日(月)
関連記事
今日の進捗
- Language Reference: Numeric and Mathematical Modules; functools — Higher order functions and operations on callable objects
- Python.use(better) -- セミナー研修テキスト
- 連結リスト課題を「続・ひよ子のきもち」で公開
Comment | |
---|---|
本人:野中 | 土日を使って高階関数について頭の中を整理しておきました。 |
担当:伊藤/本間 | 。(^^) |
関連記事
- Data model — Python v3.0.1 documentation ¶Mutable Sequence Types
- 実録 はじめての…《29》連結:メソッド extend(補足) - 続・ひよ子のきもち
連結:メソッド extend
組み込み型 list と同様に、メソッド extend を利用してリストを連結できると便利です。すると、
def ex(): s = myList("ABC") ss = "","D","EF" for i in range(3): t = ss[i] print "-->",s,`t`,"\t#",s.__class__.__name__ s.extend(t) print "<--",s ,"\t#",s.__class__.__name__ >>> ex()
-
- > ['A', 'B', 'C'] '' # myList
-
- > ['A', 'B', 'C'] 'D' # myList
-
- > ['A', 'B', 'C', 'D'] 'EF' # myList
一方のリストの末尾に、他方のリスト(に含まれる要素)を連結できるのが分かります。空のリストを連結させても、もとのリストは変化しません。また、次のことから、
>>> s = myList("ABC"); id(s); s
13488176
['A', 'B', 'C']
>>> s.extend(myList("D")); id(s); s
13488176
['A', 'B', 'C', 'D']
メソッド extend では(リストを複製しないで)もとのリストを変化させているのが分かります。リストの末尾に新たな要素を 'D' が追加しても、そのオブジェクトの識別情報 13488176 は変化しません。つまり、メソッド extend の副作用を期待しているのです。そのため、
>>> x = s.extend(myList("EF"))
>>> print x, s
None ['A', 'B', 'C', 'D', 'E', 'F']
メソッド extend はリターン値を持たない(リターン値は None と見なせる)ので、変数 x を介して変化したリストを参照できません。
class myList(object): ... def extend(self, iterable): if not iterable: return new = myList(iterable) del self.tail.next self.tail.next = new.head.next self.tail = new.tail del new.head
属性 .tail を介して、リストの末尾を参照できるので、これを利用します。また、不要になったオブジェクトは、演算子 del を使って削除しておく必要があります。
Tips
Last updated♪09/03/01