Python3の流麗なるタプル

まえがき

タプル型(tuple)はシーケンス型の一つ。リストのように順序があるが、一度作ったタプルは変更ができない。変更不可能体:イミュータブル。変更できないリストという点で言えば文字列と似ている。変更できないので辞書のキーに使うことができる。パレンティスという括弧、丸括弧を使う。

謝辞

「Pythonチュートリアル」の著者、Pythonの産みの親、Guido van Rossum氏。

翻訳者であり日本野人の会CEOである、鴨澤眞夫氏。

出版に携わった全ての人に感謝したい。

変更履歴

新規作成:2020/03/13

この記事の環境

Python3: 3.8.1

モジュール: 標準モジュール

OS: MacOS X

IDE: Spacemacs

env: virtualenv & pyenv

タプルの作り方

タプルの作り方はリストなんかとほぼ同じ。違うのはやっぱり「,」カンマを使うとリテラルだけで作れるところ。逆に捉えるとカンマを消し忘れるとバグになるかもしれないということ。

作り方:コード

# タプルを作る, 梱包:パッキング
tup = (1, 2, 3, 4, 5, 6, 3)
tup_tup = ((7, 8, 9), (10, 11, 12))
tup_list = ([1, 2, 3], ["A", "B", "C"])
tup_one = 1,
tup_tow = 1, 2,
tup_etc + ("etc",) 
t_method = tuple(1, 3, 7)

# 新しいタプルを宣言すればタプル同士を足すことはできる
new_tup = tup + tup_etc

# 消せる
del tup_one

try:
    type(tup_one)
except Exception:
    print("tup_oneはもう消えてます。")

作り方:実行結果

タプルの呼び出し方

呼び出し方はインデックス指定する、スライスで指定するやり方。ちなみに使えるメソッドはindex()とcount()のみ。なんといっても変更不可能体なもので、あしからず。

呼び出し方:コード

tup = (1, 2, 3, 4, 5, 6, 3)

# タプルの呼び出し方
tup[0]
tup[-1]
tup[2:4]

tup_list[0]
tup_list[1][1]

# 探す、数える
tup.index(3)
tup.index(3, 2)
tup.count(3)

呼び出し方:実行結果

タプルのアンパッキング

これは正確には「シーケンス・アンパッキング」と言って、リストなど他のシーケンス型でもできる。アンパッキングがあるくらいなので、「梱包:アンパッキング」もある。それはつまりシーケンス型を作ること。

アンパッキング:コード

# 開梱:アンパッキング
# リストの場合も同様
tup_2 = (11, 12, 13, 14, 15)
a, b, c, d, e, = tup_2

# 値の入れ替えにも使えるアンパッキング
ex_a = "Apple"
ex_b = "Beats"
a, b = b, a

アンパッキング:実行結果

タプルの内包表記?

タプルの内包表記は無い。そう、タプルだけは無いのだ。何度も言うがリストや辞書や集合にはあるがタプルにだけは無い。下記のように内包表記のように記述できるのが、出来上がるのはなんと「ジェネレータ」である。ジェネレータとは・・・またどっかでやります。

内包表記:コード

# ジェネレータの作り方?
tup_gen = (x for x in range(13))
type(tup_gen)
print(tup_gen)

位置引数のタプル化

位置引数とキーワード引数というものがあるわけだが、このうち位置引数でアスタリスク1個つけた可変長引数としたもので、メソッドのコール時に受け取る複数の変数はタプルに入れられる。

位置引数のタプル化:コード

# *argsがタプル化する
def fruits_caller(*args):
    for arg in args:
		print(arg)

fruits_caller("Apple", "Banana", "Mango")

むすび

私はPythonで初めてタプルを知ったが他の言語にもあるようだ。Pythonには定数というものがないのでタプルを使って定数のクラス、constantsクラスなんか作ることになるのだろうか。その辺も取り上げていこう。でわまた。

コメントする