初めてのPython(9章前半)

タプルは『オブジェクトの集合』で、あらゆるオブジェクトにネスト出来る。
ファイルはコンピュータ上のファイルへのインタフェース。

タプルとは?

  • immutableなシーケンスの一種
    • タプルを対象にした変更処理は出来ない
    • 変更が必要な時は新しいオブジェクトを作成し直す必要あり
  • オブジェクトを左から右に一定の順序で並べたもの
  • オフセットを使って要素にアクセスする
    • インデクシング、スライシングが可能

ファイルとは?

  • ファイル操作をするためだけのオブジェクト(CのFILE構造体みたいなもの)
  • 開いて、読んで、書いて、閉じる
  • 読み書きの対象は文字列のみ(それ以外のオブジェクトは変換が必要)

タプルで可能な操作

タプルにはメソッドはないが、シーケンスの一般的な操作は可能。
インデクシング、スライシング、連結、繰り返し、ループ処理など。

タプルの注意点

要素1つのタプルを作成する場合は、要素の後に”,”をつけないと数値と解釈される
宣言時には()は必要ではないが、タプルって判りやすいからつけることにする

>>> t = (1)
>>> t
1
>>> t = (1,)
>>> t
(1,)
>>> 

あと、タプル自体はimmutableだが、タプルの要素までimmutableになるわけではない。
タプルの要素になっているリストは、mutableなまま。

>>> t = (1, ['egg', {'milk':200, 'water':500}], 'spam')
>>> t[0] = 10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t[1][0] = 'bacon'
>>> t
(1, ['bacon', {'water': 500, 'milk': 200}], 'spam')
>>> t[1][0][0] = 'v'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> t[2] = 'ham'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> 

タプルとリストの違い

どちらもシーケンスだが、違いはimmutableかmutableか。

immutableなタプルは変更処理が出来ない*1が、mutableなリストは変更処理が出来て自身を変更する。
immutableなタプルはディクショナリのキーになり得るが、mutableなリストはキーになり得ない。

使い分けは、変更するなら『リスト』、しないなら『タプル』ぐらいで良いらしい。

タプルをオブジェクトの集合として見た場合、集合オブジェクトのsetとの違いはなんだって話になる。
違いは、『要素の重複が可能で順序に意味を持たせることが出来ること』、なのかな。
この違いをコーディングに活かせるひとは活かせるんだろうなぁ。
集合オブジェクトは集合演算用のメソッドがあるってことも違うけど。

*1:mutableな要素への変更処理は可能