pexels-photo-2127969.jpeg

PythonでJavascriptの様な分割代入

 
0
このエントリーをはてなブックマークに追加
Kazuki Moriyama
Kazuki Moriyama (森山 和樹)

概要

この記事では、JavaScriptでよく用いられる分割代入のテクニックをPythonでも実装します。分割代入はオブジェクトから好きな引数を取得する方法で、関数型的なプログラムの構築に役立ちます。Pythonにおける分割代入の方法と、辞書から好きなkeyのデータだけを取得する方法について説明します。

pythonの分割代入について

Pythonにおける分割代入は、*を使用して行います。

配列の分割代入

*を使って配列の分割代入を行う方法を示します。

def ar_print(*args):
    print(args)

a = [1, 2, 3]

ar_print(*a)
# => (1, 2, 3)

配列などのiteratableなオブジェクトの前に*をつけて、関数に渡すと、タプルとして引数が渡ります。

辞書の分割代入

**を使って辞書の分割代入を行う方法を示します。

def dic_print(**kwargs):
    print(kwargs)

d = {'a': 1, 'b': 2}

dic_print(**d)
# => {'a': 1, 'b': 2}

**を使用すると、辞書として引数が渡ります。

分割代入を用いた引数の選択

辞書の分割代入とキーワード引数を併用して、特定の引数だけを取得する方法を示します。

def print_a_value(*, a, **rest):
    print(a)

    return rest

d = {'a': 1, 'b': 2}

rest = print_a_value(**d)
# => 1

print(rest)
# => {'b': 2}

*の後ろの引数はキーワード引数になります。また、**restは可変長引数で、余った辞書の要素がその中に格納されます。このようにして、関数側からデータを選択することができます。

まとめ

JavaScriptでは関数型+オブジェクト指向の特性を持つため、この分割代入のテクニックは頻繁に使用されます。一方で、Pythonのようなオブジェクト指向言語ではあまり辞書ベースのデータ保持オブジェクトを使用しないことが一般的です。しかし、関数型チックな構成を持つ場合には、この分割代入のテクニックを活用してコードをより簡潔に記述することができるかもしれません。

info-outline

お知らせ

K.DEVは株式会社KDOTにより運営されています。記事の内容や会社でのITに関わる一般的なご相談に専門の社員がお答えしております。ぜひお気軽にご連絡ください。