Python とは

Python とは

Python は 1991 年にオランダ人のグイド・ヴァン・ロッサム氏によって開発されたプログラム言語の一種です。Python という名前は、イギリスの BBC が製作した「空飛ぶモンティ・パイソン」から来ているそうです。

Python は、他のプログラム言語と比較してコードがシンプルで扱いやすく、少ないコード量で書ける特徴があります。また Python は文法を単純化しているため、コードが読みやすいといったメリットがあります。コードが読みやすく、書きやすいため、プログラマの作業効率化と、コードの信頼性を高めることができます。

Python は人工知能 (AI) や、Web 開発、教育など広い分野で使われており、近年注目されている人気の言語です。Google の検索情報を元にプログラミング言語の人気を決定する PYPL PopularitY of Programming Language でも上位にランクインしています。

PYPL PopularitY of Programming Language
PYPL PopularitY of Programming Language

特徴とメリット

Python はコードの読みやすさを重視してデザインされたプログラミング言語です。文法がシンプルで、ひとつの処理を実装するために何通りもの書き方は用意されていません。そのため、他人が書いたコードも比較的読みやすいものになります。

他人が書いたコードが読みやすい点は大きなメリットです。開発現場や、Web で公開されているサンプルコード、教育の場面においても再利用しやすく、学びやすい言語であると言えます。

Python が読みやすい理由は他にもあります。それは字下げ (インデント) 単位に意味を持たせるオフサイドルール (Off-side Rule)があるためです。このルールのおかげで、誰が Python のコードを書いても同じコードになるため、読みやすく理解しやすいコードになります。

オフサイドルールとは、一部のプログラミング言語において字下げによって文などのかたまりの範囲(ブロック)を示す規則です。そのような言語では、ブロックは字下げによって形成され識別されます。この用語と考え方は Peter J. Landin によるもので、ここでの off-side は「(左端)側から離れる」という意味ですが、これはサッカーなどの球技におけるオフサイド規則のもじりと考えられています。

Python は人工知能の中でもとりわけ深層学習 (Deep Learning) の分野で多くの支持を得ています。人工知能や深層学習は、簡単に言えばロボットが人間のように物事を認識したり考えたりできるようになる技術です。Python ではそれらの分野で使用できるフレームワークライブラリが豊富で、開発を簡単に高速化することができます。

フレームワークとは、アプリケーションを開発する際に、開発効率を上げるための便利な機能が詰まったツールです。ライブラリとは、役に立つプログラムをまとめたものです。フレームワークとライブラリを使えば、ゼロから環境を整えたり、必要な機能を組み上げる必要がなくなるため、開発効率を向上することができます。Python で人気のあるフレームワークは、DjangoFlaskBottle などがあります。

ライブラリとは、役に立つプログラムをまとめたプログラムの集まりです。ライブラリのおかげで、必要な処理をライブラリから呼び出せば効率的にプログラミングを行うことができます。Python には様々なライブラリが用意されており、その中には機械学習に関するライブラリもあります。

機械学習のライブラリの中でもっとも人気なものは TensorFlow です。TensorFlow は、Google が開発した機械学習ライブラリで、様々な機械学習の分野で使用するためのオープンソフトウェアライブラリです。TensorFlow は YouTube や Google 翻訳、音声検索などで使用していた DistBelief を元に、使いやすく様々な業務で活用できることを目的に開発が進められ、Google 社内でも業務で TensorFlow が使われています。

オブジェクト指向

Python は、オブジェクト指向言語です。ポリモーフィズム、演算子のオーバーロード、多重継承など、一般的に難しい概念も Python は構文や型付けなどがシンプルであるため簡単に使うことができます。

Python がオブジェクト指向言語であることは、コードの作成、再利用に役立つだけでなく、C++、Java などの他のオブジェクト指向言語のプログラムと組み合わせて使うスクリプトの作成に役立ちます。例えば、適切なグルーコードを使えば、Pythonで C++ や Java、C# のクラスを継承するプログラムを作ることも可能です。重要な点は、使う側は Python がオブジェクト指向言語であるということを意識してもしなくてもよいということです。Python は C++ と同じように、オブジェクト指向、手続き指向の両方をサポートしています。

フリー

Python は無料で利用でき、配布も無料です。Tcl、Perl、Linux、Apache といったオープンソースソフトウェアと同様、インターネット上で Python システムのすべてのソースコードが無料で入手できます。コピー、システムへの組み込み、ユーザが自ら作った製品とともに出荷することなども制限なしに行えますし、ユーザが Python のソースコードを販売することさえできます。

無料だからといっても、サポートがないということではありません。Python のオンラインコミュニティは、ユーザの疑問に答えてくれます。また、Python には完全なソースコードが添付されており、開発者は言語の開発・改良に関して大きな権限を持つことができます。その他にも、ドキュメントが充実しているというのも Python の強みです。

Python の開発はコミュニティで行われており、主にインターネットが開発者のコミュニケーションの場になっています。言語の改良は、PEP プロセスと呼ばれる公式に定められた手順で行うことになっており、改良の内容は公式のテストシステムによって精査されます。

ポータブル

Python の標準インプリメンテーションは、ポータブルな ANSI C で書かれており、現在利用できる主なプラットフォームのほぼすべてでコンパイル、実行が可能です。

Python とともに提供される標準ライブラリモジュールも、できる限り多くのプラットフォームで同じように利用できるよう作られています。さらに、Python のプログラムは自動的にコンパイルされてポータブルなバイトコードになるので、どのプラットフォームでも、適切なバージョンの Python がインストールされていれば同様に動作します。

これは、コア言語と標準ライブラリを利用した Python プログラムが、UNIX、Windows の他、Python インタプリタを備えたシステムのほとんどで同じように動作するということを意味します。Python ポートの多くには、プラットフォーム固有のエクステンションが含まれていますが、Python のコア言語とライブラリは、どこでも同じように機能します。先述のとおり、Python には、Tkinter という、Tk GUI ツールキットへのインタフェースも用意されています。Tkinter を使うと、本格的な GUI を備え、主要な GUI プラットフォームのすべてで変更なしに動作する Python プログラムが作成できます。

高機能

機能面から見ると、Python はハイブリッドな言語であると言えます。ツールセットの存在により、Python は典型的なスクリプト言語と、システム開発言語の中間に位置します。スクリプト言語のわかりやすさ、使いやすさと、コンパイラ言語のような高度なソフトウェア開発ツールを兼ね備えています。

ダイナミックな型付け
Python では、オブジェクトの型がプログラム実行時に自動的に決められるため、コードの中で型やサイズを宣言するなどの作業は不要です。型や変数の宣言というもの自体が Python には存在しません。データ型の宣言がないということは、Python のコードがあらゆる種類のオブジェクトに対応できるということを意味します。
自動メモリ管理
Python では、オブジェクトへのメモリの割り当て、オブジェクトが利用されなくなった場合のメモリ割り当ての解除(ガーベージコレクション)などが必要に応じて自動的に行われます。メモリに関する処理は言語が行うので、プログラマが自らそのためのコードを書く必要はありません。
大規模システム開発のサポート
Python には、大規模なシステムの構築に利用できるモジュール、クラス、例外といったツールが用意されています。こうしたツールを使えば、システムをいくつかのコンポーネントによって構成すること、コードの再利用・カスタマイズを容易に行うこと、不測の事態やエラーを穏便に処理することなどが可能です。
ビルトインのオブジェクト型
Python には、リスト、ディクショナリ、文字列といった、使用頻度の高いデータ型(オブジェクト型)があらかじめ言語の一部として組み込まれています。いずれも、柔軟性に富み、使いやすいデータ型です。必要に応じてサイズの増減ができる、入れ子にして複雑な構造のデータを格納できる、といった特徴も備えています。
オブジェクト型の操作機能
Python には、上記のオブジェクト型に関して、連結、スライシング(データの抽出)、ソート、マッピングといった操作を行うための機能も数多く標準で用意されています。
ライブラリユーティリティ
Python には、プログラムにより高度な機能を持たせるためのライブラリツールも多数用意されています。ライブラリツールを使えば、正規表現によるマッチングからネットワーキングまで様々な機能をサポートできます。
サードパーティユーティリティ
Python はオープンソースなので、Python にあらかじめ組み込まれているもの以外に、開発者によっても様々なコーディング済みツールが提供されます。例えば、COM、イメージング、CORBA ORB、XML、データベースプログラミングなどをサポートするサードパーティユーティリティがインターネット上で無料で入手できます。

他言語との連携が容易

Python のプログラムは、他の言語で書かれたコンポーネントと様々な方法で簡単につなぐことができます。例えば、Python の C API を使用すれば、C のプログラムから Python のプログラムを呼び出すことや、逆に Python のプログラムから C のプログラムを呼び出すことができます。Python のプログラムに必要に応じて機能を追加することや、他の環境やシステムと Python プログラムを連携して使うことができます。C や C++ などで書かれたライブラリと組み合わせることで、Python をフロントエンド言語、カスタマイズツールとして利用することも可能です。

使いやすい

Python が使いやすい理由は、コードを書けばプログラムを即座に実行できるという点にあります。C や C++ のように、コンパイル、リンクといった中間のステップはありません。対話型のコマンドラインを使ったプログラミングなども可能で、作ったプログラムを即座にテストできるだけでなく、改造を行った場合にもその影響をすぐに確認できます。

Python が使いやすい理由は他にもあります。構文が単純であること、高機能でしかも簡単に使いこなせるツールがあらかじめ多数組み込まれているということも理由としては重要です。C、C++、Java といった他の言語と比較すると Pythonでは、同等のコードを書いたとしても、はるかに単純で規模が小さく、柔軟性に富んだものになります。

学習しやすい

Python は他の言語に比べても学びやすい言語です。数日もあれば、かなりのレベルの Python プログラムが書けるようになります。これは、仕事で使うために学習を始めようとしている開発者にとっても、Python プログラムを使いこなしたいというエンドユーザにとっても朗報です。エンドユーザが Python を短期間で習得し、オンサイトでカスタマイズなどができるようになれば、サポートの手間が少なくて済むことになります。現在、Python プログラムを利用するシステムが増えているのにはそういう理由もあります。Python には高度なプログラミングツールもありますが、言語のコアの部分は初心者でもベテランでも変わらず、簡単に学ぶことができます。

できること

Python では多くのものやサービスが作れます。例えば、Web アプリケーション、デスクトップアプリケーション、組み込み型アプリケーション、機械学習などです。その他にも有名なサービスとして Youtube や Evernote、Instagram、Pinterest も Python で作られています。

Python でアプリケーション開発を行う場合、Django や Flask といったフレームワークが有名です。ゲーム開発を行う場合、Pygame といったライブラリも用意されています。Python は世界中に利用者・開発者がたくさんいるため、様々なライブラリが提供されています。

Python は、設計が優れていると同時に、非常に「実用性が高い」言語です。これは、開発者が日々こなすべき仕事に様々な面で実際に役立ちます。スクリプトやコンポーネントの作成はもちろん、スタンドアロンプログラムの作成にも使えます。Python は汎用言語なので、Web サイトの構築、ゲーム開発の他、ロボットの開発、宇宙船の制御などにも応用が可能です。その他にも Python の得意分野としては、自動データ処理や分析、Web スクレイピング、FinTech やブロックチェーンなどがあります。

システムプログラミング

Python には OS のサービスへのインタフェースがあらかじめ組み込まれています。そのため、システム管理のためのツールやユーティリティなどを作成するのに適しています。Python を使えば、ツールやユーティリティをポータブルな、保守のしやすいものにできます。ファイルやディレクトリツリーの検索、他のプログラムの起動、プロセスやスレッドを使う並列処理、といったことを Python のプログラムで行うようにすることも可能です。

Python の標準ライブラリには、POSIX バインディングなどの他、環境変数、ファイル、ソケット、パイプ、プロセス、マルチスレッド、正規表現パターンマッチング、コマンドライン引数、標準ストリームインタフェース、シェルコマンドランチャ、ファイル名展開といった、一般的な OS ツールのサポート機能が含まれています。また、Python のシステムインタフェースの多くはポータブルであるというのも特徴の 1 つです。例えば、ディレクトリツリーをコピーするスクリプトを Python で作れば、実行するプラットフォームが変わったとしても修正する必要はありません。

Graphical User Interface

シンプルでターンアラウンドの短い Python は GUI(Graphical User Interface)プログラミングにも適しています。Python には Tkinter と呼ばれる Tk GUI API への標準オブジェクト指向インタフェースが用意されています。Tkinter を使用すれば Python でネイティブなルック&フィールを持つポータブルな GUI が作成できます。Python と Tkinter による GUI は Windows でも Mac でも修正なしで動かせます。基本の Tkinter ツールキットには高度なウィジェットを追加できる Pmw というフリーのエクステンションパッケージもあります。また、C++ のライブラリを基に作られた wxPython GUI API にも、Python でポータブルな GUI を作るためのツールキットが用意されています。

PythonCard や Dabo などのツールキットは、wxPython や Tkinter などの API を基礎として作られたものです。適切なライブラリを使えば、Qt、GTK、MFC、Swing などの GUI ツールキットを Python とともに使用することもできます。Web ブラウザで実行するアプリケーションや、インタフェースをシンプルにする必要のあるアプリケーションには Jython(Python の Java バージョン)や Python のサーバサイド CGI スクリプトなども使用できます。

インターネットスクリプティング

Pythonは、標準のインターネットモジュールも備えています。このインターネットモジュールを使うことで、クライアントあるいはサーバで様々なネットワーク関連処理を行う Python プログラムが作れます。例えば、ソケット通信、サーバサイドの CGI スクリプトに送られたフォーム情報の抽出、FTP によるファイルの転送、XML ファイルの処理、e メールの送受信・作成・解析、URL に対応するWebページの取得、Web ページの HTML・XML コードの解析、XML-RPC による通信、SOAP や telnet などをサポートした Python プログラムができるということです。Python のライブラリを使えば、インターネット関連処理を行うプログラムは簡単にできます。

Python でインターネットプログラミングをするためのサードパーティツールも多数存在し、Web で入手することが可能です。例えば、Python スクリプトで HTML ファイルを生成するためのクラスライブラリである HTMLGen、Python プログラムを Apache Web サーバで効率よく動作させるための mod_python パッケージ、クライアント上で動作するサーバサイドアプレットのコーディングをサポートするツールなどは、そうしたサードパーティツールの例です。その他、Django、TurboGears、Pylons、Zope、WebWare といった、Python を使用して簡単に本格的な Web サイトを構築できる Web 開発パッケージなどもあります。

コンポーネントの統合

Python は C や C++ によって拡張でき、C や C++ のコードに Python のコードを埋め込むということもできます。そのため Python を、システムやコンポーネントの動きをコントロールするためのスクリプトに使用すると非常に便利です。システムやコンポーネントの間をつなぐという役割を Python のスクリプトに持たせることもできます。例えば、C ライブラリを Python に統合すれば Python のコードを、C で作成したコンポーネントのテストや起動に使用できます。また、ソフトウェア製品にオンサイトでのカスタマイズのための Python プログラムを組み込んでおけば、顧客は製品全体を再コンパイルしたり、ソースコードを入手したりすることなく、カスタマイズができます。

SWIG や SIP などのコードジェネレータを使えば、コンパイラ言語で作ったコンポーネントを Python のスクリプトにリンクするために必要な作業の大半は自動化されます。Python の COM サポート、Java で書かれた Jython、Python の .NET ベースのインプリメンテーションである IronPython、Python 向けの様々な CORBA ツールキットといったより大規模なフレームワークを利用し、Python を使用してコンポーネントを作成するということもできます。例えば、Word や Excel と連携するスクリプトを Python で作成することも可能です。

データベースプログラミング

Sybase、Oracle、Informix、ODBC、MySQL、PostreSQL、SQLite などへのインタフェースを使えば、データベースとの連携プログラムを Python で書くことができます。その他、Python スクリプトから SQL データベースシステムにアクセスするためのポータブルなデータベース API も定義されています。アクセスするデータベースが変わっても同じように使えるのが特徴です。ベンダは、この API をインプリメントしたインタフェースを提供します。例えば、MySQL システムへのアクセスのために書いたスクリプトを、Oracle など他のシステムへのアクセスに使用する場合でも、コードの修正はほとんど必要ありません。

Python の標準モジュールである pickle を使うと、オブジェクトの永続化が簡単にできます。Python オブジェクトをファイルなどに保存する、あるいは保存したオブジェクトを復元するためのプログラムが簡単に書けます。完全なオブジェクト指向データベースシステムである ZODB、リレーショナルテーブルを Python のクラスモデルにマッピングできる SQLObject など、Web で提供されているサードパーティシステムもあります。

ラピッドプロトタイピング

Python プログラムからは、Python で書かれたコンポーネントも C で書かれたコンポーネントも同じように見えます。そのため、はじめはシステムのプロトタイプを Python で作り、後で必要に応じてコンポーネントを C や C++ などのコンパイラ言語に移行することもできます。システムの中でも、特にパフォーマンスが重視されない部分に関しては、Python のコードをそのまま活かすことができます。Python のコードを残せば、保守性や使いやすさの面で有利になるでしょう。

数値計算(科学研究向け)プログラミング

Python で数値計算プログラミングに使用するツールとしての NumPy には、配列オブジェクト、標準の数学ライブラリへのインタフェースといった高度な機能が数多く用意されています。NumPy により、プログラム中の高いパフォーマンスが要求される部分にだけコンパイラ言語のコードを使うということが簡単にできます。これにより、実行速度と簡便さの両方を享受することができるのです。従来は FORTRAN や C++ などで書かれていたプログラムを Python で書き直すということが可能になる場合もあります。

ゲーム、画像処理、AI、XML、その他

Python の応用範囲は、pygame システム、PIL パッケージを使用したグラフィックス、画像処理、ゲームのプログラミングなどが行えます。PyRo ツールキットを使ってロボット制御プログラミングを行うこともできますし、xml ライブラリパッケージ、xmlrpclib モジュールの他、サードパーティのエクステンションを使った XML パーシングも可能です。ニューラルネットワークシミュレータやエクスパートシステムシェルを使用した AI プログラミングや、NLTK パッケージを使用した自然言語解析もできます。PySol という、Python で書かれたソリティアプログラムも存在します。

Python の「コンポーネントの統合が容易にできる」という特徴を活かせば、他にも多数の応用があり得ます。C などのコンパイラ言語で書かれたコンポーネントのライブラリへのフロントエンドとして Python を使うことで、Python の用途は大きく広がるでしょう。Python は元々汎用性の高い言語ですが、コンポーネントの統合によってさらに汎用性は高まります。

できないこと

Python には苦手な分野もあります。例えば、スマホアプリ開発は Python に適してはいません。スマホアプリ開発であれば kivy というフレームワークを使えば Python でも開発は可能ですが、Swift や Kotlin などのプログラミング言語の方が向いています。

その他にもゲーム開発があります。前述のとおり Pygame というライブラリを使えば Python でもゲーム開発ができますが、本格的なゲームを作る場合は Unity や C# などのプログラミング言語の方が向いています。

プログラミング言語は何かを作り出すための道具のようなもので、どのような道具においても向き不向きがあります。そのため、ときには目的に合ったプログラミング言語を選択しなければ開発効率が極端に落ちてしまいます。

Python のダウンロード

ここでは Windows10 64bit 環境として Python のダウンロードとインストールを行います。まずは Python の本体を以下からダウンロードするため、以下のサイトにアクセスします。

Download のエリアから最新版 (執筆時点では Python 3.7.2) をクリックします。

Python のダウンロード
Python のダウンロード

ページの一番下にダウンロード用のリンク一覧が表示されます。その中から Windows x86-64 executable installer をクリックするとダウンロードが開始されます。

Python のダウンロード
Python のダウンロード

python-3.7.2-amd64.exe という名前のファイルがダウンロードされれば、ダウンロードは完了です。

Python のインストール

ダウンロードしたファイルをダブルクリックするとインストールが始まります。インストールする場合、Add Python to PATH にチェックを入れてください。チェックを入れることでパスの設定が自動で行われます。その後、Install Now をクリックしてインストールを開始します。

Python のインストール
Python のインストール

インストールが完了するまでしばらく待機します。

Python のインストール
Python のインストール

次の画面が表示されれば、インストールは完了です。Close をクリックしてインストールを終了してください。

Python のインストール
Python のインストール

インストールが正しく行われたかを確認するためには、コマンドプロンプトで python --version コマンドを実行することで確認できます。正常にインストールされていれば、Python のバージョンが返されます。

> python --version
Python 3.7.2
インストール後の確認

Python の実行

Python をインストールすると、Python のプログラムを実行できるようになります。Python のプログラムを実行する方法には大きく2つの方法があります。

  • Python に付属している対話型インタープリタを使うと小さなプログラムを試すことができます。例えば、print() 関数などを使ってすぐに結果を確認することができます。対話型インタープリタを起動するためには、コマンドプロンプトで python コマンドを入力します。終了する場合は、Ctrl + Z キーを同時に押します。

    > python
    Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    
    >>> print('hello, world!')
    hello, world!
    対話型インタープリタ
  • Python のプログラムをテキストファイルに保存して実行することができます。拡張子には .py を付け、コマンドプロンプトから python コマンドのパラメータとしてプログラムのファイル名を渡す方法です。例えば、テキストファイルに print('hello, world!') と記述し、hello.py という名前で保存したプログラムコードを実行する例は以下のとおりです。

    > python hello.py
    hello, world!
    Python プログラムの実行

関連記事

  1. プログラミング Python 入門
  2. Python の基本
    1. Python とは
    2. 構文
    3. print 関数
  3. 変数・数値・文字列
    1. 変数
    2. 数値
    3. 文字列
  4. リスト・タプル・辞書・集合
  5. 条件分岐
  6. 繰り返し処理
  7. 関数
  8. オブジェクトとクラス
Category:
プログラミング
公開日:
更新日:
Pageviews:
243
Shares:
2
Tag:
Python