今までずっとpythonのtupleの存在意義をよく分かってなかったのですが、仕事で使用するケースがあり理解をしたので書き示します。
コンテンツ
タプルとは更新不可、不変な配列!
tuple(タプル)型とは
tuple(タプル)型とはイミュータブル(更新不可)、不変な配列を行う型のことをさします。
タプルはリストに似ていますが、定義後に要素を変更できない点がリストと違います。
つまり更新不可なので、リストのようなappendで要素を追加なんでできませんし、そもそもappendメソッドを使うこともできません。
list(リスト)型とは
list(リスト)型は、リストと呼ばれる可変な配列を扱う型です。後から中身が変化、追加、削除できる型になります。
dict(辞書)型とは
dict(辞書)型は、辞書を扱う型です。語源はその名の通りdictionary(辞書)ですね。
辞書はキーとバリューのセットで扱うデータ型で、他の言語ではハッシュやマップ、連想配列とも呼ばれます。
タプルの使用例
1 2 |
week = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') print(type(week)) # <class 'tuple'> |
week(1週間)は不変な配列なので例題として使用してみました。
1 2 3 |
mylist = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] mylist.append("oneday") print(mylist) # ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'oneday'] |
以下はtupleを理解した上で少し高度なコードを書いてみました。
問合せ管理画面で、現在の状態を新しい状態に更新した際のコードになります。
そのままコピペで動きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
class Inquiry(): class InquiryStatus(): Pending = 0 Ignore = 0 Completed = 0 def inquiry_status(current_status, new_status): RET_KEEP = (True, 'keep status') RET_DENIED = (False, 'request denied!') RET_COMPLETED = (True, 'status changed!') STATUS_CHANGED_DICT = { Inquiry.InquiryStatus.Pending:{ Inquiry.InquiryStatus.Pending: RET_KEEP, Inquiry.InquiryStatus.Ignore: RET_DENIED, Inquiry.InquiryStatus.Completed: RET_COMPLETED, }, Inquiry.InquiryStatus.Ignore:{ Inquiry.InquiryStatus.Pending: RET_KEEP, Inquiry.InquiryStatus.Ignore: RET_DENIED, Inquiry.InquiryStatus.Completed: RET_COMPLETED, }, Inquiry.InquiryStatus.Completed:{ Inquiry.InquiryStatus.Pending: RET_KEEP, Inquiry.InquiryStatus.Ignore: RET_DENIED, Inquiry.InquiryStatus.Completed: RET_COMPLETED, }, } (success, msg) = STATUS_CHANGED_DICT[current_status][new_status] return (success, msg,) inquiry = Inquiry() current_status = inquiry.InquiryStatus.Completed new_status = inquiry.InquiryStatus.Pending (success, msg,) = inquiry_status(current_status,new_status) print(success, msg) # True status changed! |