PythonとRubyのタプルアンパッキングの違い

昼休みの雑談でRubyのタプルアンパッキングは個数がミスマッチでもエラーにならないと知ってびっくりした。

余ったら捨てられる。

irb(main):007:0> x, y = 1, 2, 3
=> [1, 2, 3]
irb(main):008:0> x
=> 1
irb(main):009:0> y
=> 2

足りなかったらnilで埋められる。

irb(main):010:0> x, y, z = 1, 2
=> [1, 2]
irb(main):011:0> x
=> 1
irb(main):012:0> y
=> 2
irb(main):013:0> z
=> nil

ちなみにPythonでは個数のミスマッチはValueError例外が飛ぶ。

>>> x, y = 1, 2, 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> x, y, z = 1, 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack

https://github.com/nishio/learn_language/blob/master/coderunner/test/tuple_unpacking.py