Pythonを使う理由がようやく分かった――「複雑データの即時使用」

Pythonはなぜ広く使われているのでしょうか。

よく「文法が簡単」「初心者でも覚えやすい」「コードが短い」と説明されます。

もちろん、それも理由の一つでしょう。

しかし、C++などの静的型付け言語を使える人もPythonを使います。単に「簡単だから」というだけでは、十分な説明になりません。

最近になって、Pythonを使う大きな理由の一つがようやく見えてきました。

それが、

「複雑な構造化データを、その場ですぐ作って使えること」

です。

目次

一度しか使わないデータでも構造化できる

例えば、次のようなデータを考えます。

graph_data = {
    "title": "売上推移",
    "x": ["Jan", "Feb", "Mar"],
    "y": [100, 130, 125],
    "options": {
        "grid": True,
        "legend": False
    }
}

Pythonでは何の変哲もないコードです。

しかし、文字列、リスト、数値、真偽値をまとめ、さらに階層構造まで作っています。

それでも、事前に型を定義する必要はありません。

必要になれば、

graph_data["unit"] = "万円"

と後から項目を追加することもできます。

データを書くこと自体が、構造を作ることになっています。

C++では構造を先に定義する

同じデータは、もちろんC++でも作れます。

struct Options {
    bool grid;
    bool legend;
};

struct GraphData {
    std::string title;
    std::vector<std::string> x;
    std::vector<int> y;
    Options options;
};

こうして型を定義してから、GraphDataを作ります。

同じ構造のデータを何度も使うなら、この方法には大きな利点があります。構造が明確になり、コンパイラによる型チェックも受けられます。

しかし、このデータを一度しか使わないとしたらどうでしょう。

「一つのデータのためだけにGraphDataOptionsを定義するのか」

と考えると、少し大げさに感じます。

Pythonでは、その迷いがほとんどありません。

rule = {
    "ext": ".jpg",
    "dest": "images"
}

これくらい小さなデータでも、一つのまとまりとして気軽に構造化できます。

「型を書かなくていい」だけではない

動的型付けは、よく次のような例で説明されます。

x = 10
x = "hello"

しかし、これだけでは動的型付けのメリットはあまり見えてきません。

むしろ重要なのは、次のような使い方ではないでしょうか。

experiment = {
    "conditions": {
        "temperature": 25,
        "pressure": 1.0
    },
    "samples": [
        {"time": 0, "value": 1.2},
        {"time": 1, "value": 1.5}
    ]
}

異なる種類の値をまとめ、名前を付け、複数並べ、階層化する。

しかも、そのためだけの型を事前に作る必要がありません。

つまり動的型付けの価値は、単に「型宣言を省略できる」ことではなく、

型を定義するほどでもない複雑なデータを、必要になった瞬間に構造化できること

にもあります。

Pythonはデータ構造まで試せる

この特徴は、プロトタイプでも大きな意味を持ちます。

最初は、

graph_data = {
    "title": "売上推移",
    "values": [100, 130, 125]
}

としておき、必要になったら、

graph_data["unit"] = "万円"

と追加する。

さらに必要なら階層を増やす。

つまり、

データを作る
    ↓
使ってみる
    ↓
構造を変える
    ↓
また試す

ということが簡単にできます。

Pythonがプロトタイプに向いているのは、処理を短く書けるからだけではありません。

データモデルそのものをプロトタイピングできるのです。

Inputと期待するOutputを先に作る

この性質を利用すれば、テストもデータから考えられます。

case = {
    "input": {
        "numbers": [10, 20, 30]
    },
    "expected": {
        "average": 20
    }
}

まず、

このInputなら
このOutputになってほしい

という具体例を作る。

その後で、

def process(input_data):
    ...

という処理を考えます。

つまり、

Input
  ↓
期待するOutput
  ↓
処理を考える

という順番です。

複雑なデータを簡単に作れるPythonだからこそ、この方法も気軽に試せます。

Pythonは「簡単なC++」ではない

ここまで考えると、Pythonは単に「C++より簡単な言語」なのではないことが分かります。

静的型付けでは、

構造を定義する
    ↓
データを作る
    ↓
構造を保証する

という方向が得意です。

Pythonのような動的なデータ表現では、

まずデータを作る
    ↓
使ってみる
    ↓
構造を発見する

という方向が得意です。

だからC++を使える人にも、Pythonを使う理由があります。

難易度の上下ではなく、得意な仕事が違うのです。

まとめ

スクリプト言語がもたらした大きな価値の一つは、

複雑な構造化データを簡単に作って使えるようにしたこと

ではないでしょうか。

特に重要なのは、一度しか使わないデータでも気軽に構造化できることです。

静的型付けでは、型を一つ作るほどではないと考えてバラバラの変数にしてしまうようなデータでも、Pythonなら、

data = {
    ...
}

と一つの意味のある構造にできます。

そして、その構造自体を試行錯誤できます。

スクリプト言語は、構造化データを「設計対象」から「日用品」にした。

そう考えると、「Pythonは簡単だから使われる」という説明とは違った、Pythonを使う理由が見えてきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次