Pythonで、要素が1つだけのタプルを作成しようとした時に、つい以下のような記述を書いてしまいがちです。
t = ('hello')
print(t)
これを出力すると、一見問題ないように見えますが、type関数で確認してみると、タプルではないことがわかります。
print(type(t))
<class 'str'>
Pythonでは、変数宣言時にデータ型を指定する必要がないため、このように意図していないデータ型で作成されてしまうことがあります。
今回の場合、tという変数は、「要素が一つだけのタプル」ではなく、「文字列」として解釈されてしまっています。
これを防ぐためには、要素を追加する際に末尾にカンマを付与することで、要素が一つだけのタプルを作成することができます。
t2 = ('hello',)
print(t2)
print(type(t2))
('hello',)
<class 'tuple'>
何故このようにしなければならないのかと言うと、タプルは個々の要素をカンマで区切って構成するものだからです。
tの変数が文字列になってしまったのは、この条件を満たしていなかったからですね。
また、複数の要素からなるタプルでも、末尾にカンマをつけても良いことになっています。
t3 = ('red',
'blue',
'yellow',
)
print(t3)
print(type(t3))
('red', 'blue', 'yellow')
<class 'tuple'>
こうすることによって、要素の並べ替えを行う時にカンマのつけ忘れによる文法エラーが発生しなくなり、コード生成が楽になるメリットがあります。
タプルだけではなく、リストや辞書も同様に末尾にカンマを付与することが許可されています。
リストや辞書は要素を追加できるので、要素を末尾に追加する際の文法エラーの発生を防ぐことができるのです。
意外と見落としがちな部分ですが、知っておくと一目置かれる存在になれるかもしれません。
参考サイト
なぜ Python ではリストやタプルの最後にカンマがあっても良いのですか?
Python 言語リファレンス(3.2. 標準型の階層)
※タプル型 (tuple)を参照。
弊社主催のPython基礎研修では、基礎文法を始め、Python未経験の方でもわかりやすいカリキュラムでPythonの基礎をマスターできます。
講座は随時開催しておりますので、ご興味のある方は是非お気軽にお問い合わせください。