375 views
B!0X

PythonでJavascriptの様な分割代入

python-distruction

概要

この記事では、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のようなオブジェクト指向言語ではあまり辞書ベースのデータ保持オブジェクトを使用しないことが一般的です。しかし、関数型チックな構成を持つ場合には、この分割代入のテクニックを活用してコードをより簡潔に記述することができるかもしれません。

関連事例

  • データ分析支援

    事例:過去実績を提案に活用する分析の仕組み

    広告代理店との取り組みです。同社は過去実績の示唆を次の提案へ反映し、結果をどのように予測したか、その背景まで提案先のクライアントへ説明できるようになりました。KDOT は案ごとの見込みと判断材料を比較できる仕組みを業務アプリとして実装しました。さらに業務アプリの中核となる処理ロジックと機械学習モデルについて、特許手続きを担う弁理士が技術の新規性や工夫を検討するための資料を作成しました。その後この発明には特許が付与されました。

  • データ基盤構築 / 技術顧問(技術企業向け)

    事例:効果検証の分析処理基盤

    効果検証を提供する分析会社との取り組みです。同社は分析者の人数に比例してしか売上と利益を伸ばせない事業の形を、効果検証をプロダクトとして提供することで変革しようとしていました。手法とモデルは同社のまま、社内では開発できなかった、データと機械学習の重い推定を製品として動かす仕組みの開発を、開発支援会社の KDOT に任せました。推定を案件ごとの手作業ではなくシステムで実行できるようになったことで、同社は人数に比例しない形で売上と利益を伸ばすことを目指せるようになりました。

開発の相談先をお探しですか。

この記事に関わることについてご相談がある方はお問い合わせください。

KDOT についてお問い合わせ