プログラミング Python 入門

はじめに

本ページは、Python を使ってこれからプログラミングの学習を開始される方を対象に Python の仕様をわかりやすく網羅的に解説した入門ページです。Python の基本的な部分から細かく複雑な部分について、サンプルコードを混じえながら説明します。

Python の基本

Python が初めての方は、本章から読み進めてください。Python は、近年注目されているプログラミング言語で、Google の検索情報を元にプログラミング言語の人気を決定する PYPL PopularitY of Programming Language でも上位にランクインしています。

あなたが数ある言語の中から、Python というプログラミング言語を学ぼうとするのは悪い選択ではありません。Python を選ぶ理由は、ソフトウェアのクオリティ、生産性の高さ、ポータビリティ、充実したライブラリ、コンポーネント統合の容易さ、そしてプログラミングの楽しさが挙げられます。

ソフトウェアのクオリティ
Python は、コードの読みやすさ、整合性、ソフトウェアのクオリティが重視されている言語です。コードが読みやすいということは、他の従来からあるスクリプト言語に比べ、保守がしやすいということです。また、Python のコードには統一性、一貫性があることから、たとえ他人が書いたコードであっても理解しやすいというのも長所です。その他、Python はオブジェクト指向言語であるため、ソフトウェアの再利用がしやすいといった特徴もあります。
生産性の高さ
Python には、C、C++、Java といったコンパイラ言語、またはスタティックな型付けがされる言語に比べ、はるかに生産性が高いという特徴があります。Python のコードの規模は、C++ や Java の 1/3 ~ 1/5 程度になります。これは、その分だけデバッグや開発後の保守にかかる手間が少なくなります。また、特別なツールを使ったコンパイルなどの作業を行うことなく、即座に実行できるという点も便利です。これにより、プログラミング作業にかかる時間も大きく短縮されます。
ポータビリティ
Python のプログラムは、修正することなく、複数のプラットフォームで実行することができます。例えば、Linux で作った Python のコードを Windows に移植する際、必要になる作業は、コードをコピーするだけです。また、Python には、ポータブルな GUI、データベースアクセスプログラム、Webベースシステムなどを開発するための機能もいくつか用意されています。プログラムの起動、ディレクトリ処理といった OS インタフェースのコードも、Python であればポータブルにできます。
充実したライブラリ
Python にはあらかじめ豊富な機能を備えたライブラリ(標準ライブラリ)が用意されています。このライブラリを利用すれば、テキストのパターンマッチング、ネットワークスクリプティングといった、アプリケーションレベルのプログラミング作業の負担が軽減されます。プログラマ独自のライブラリやサードパーティのアプリケーションサポートソフトウェアなどを使って Python を拡張するということも可能です。Python のサードパーティツールには、Web サイト構築、数値計算、シリアルポートアクセス、ゲーム開発など、様々な用途のものがあります。
コンポーネント統合の容易さ
Python は、様々な統合メカニズムを利用することで、他のアプリケーションとのコミュニケーションが簡単に行えます。現在では、Python のコードから C と C++ のライブラリを呼び出すことや、C と C++ のプログラムから Python のコードを呼び出すこと、Python のコードと Java のコンポーネントを統合することなどができるようになっています。COM や .NET を利用した通信、または SOAP、XML-RPC、CORBA などのインタフェースからネットワーク経由での連携もできます。
プログラミングの楽しさ
Python は、楽しくプログラミングができる言語です。プログラミングが退屈でつらい作業になることはありません。なぜなら、Python は極めて使いやすく、優れたビルトインツールセットを備えた言語だからです。「楽しい」というのは目に見えるメリットではありませんが、生産性にとってはプラスになるはずです。

Python とは

Python とはプログラミング言語のひとつです。分かりやすい文法が特徴で、非常に広く使われているため比較的学習しやすい言語と言えます。

Python の言語思想として、「少ないコード量で書ける」ことや、「コードが読みやすい」といった特徴があります。幅広い分野で使われていますが、特に人工知能、Web 開発、教育分野などで使われています。もちろん、その他の分野でも利用されていますが、すべての開発に対応できるわけではなく苦手な分野も存在します。

  1. Python とは
    1. 特徴とメリット
    2. できること
    3. できないこと
  2. Python のダウンロード
  3. Python のインストール
  4. Python の実行

構文

Python のインストールが終わったら、早速プログラムを実行してみましょう。Python で Hello world! を出力するプログラムは以下のとおりに記述します。

print("Hello world!")
Python で Hello world!

上記のプログラムを hello.py で保存し、以下のように実行します。

python hello.py
Python の実行

Python では、プログラムを正しく記述するためのルールがあります。それらの基本的な文法を「構文 (Syntax)」と呼びます。ここでは Python の構文について確認していきます。

  1. 式文
  2. コメントアウト
  3. インデント
  4. エンコードルール

print 関数

Python を学び始めてから、最初にもっともよく使う print 関数について学びます。print 関数は、Hello world! を出力したプログラムにも登場しましたが、文字列を画面に表示するだけではありません。ここでは様々な print 関数の使い方について学びます。

  1. Python2 と Python3 の違い
  2. print 関数
  3. format 関数

変数・数値・文字列

Python では、すべて(ブール値、整数、浮動小数点数、文字列、関数)がオブジェクトとして実装されています。オブジェクトは、データを入れてある箱のようなものです。オブジェクトには、ブール値、整数などのデータ型があり(単純に型と呼ぶこともある)、そのデータで何ができるかは型によって決まります。例えば、Python でオブジェクトに int(整数)という型が付けられていたら、それは他の int に足すことができるということがわかります。

変数

C、C++、Java など、スタティックな型付けが行われるコンパイラ言語を使ってきた人は、少し困惑しているかもしれません。今までのサンプルコードで使用した変数はいずれも「型の宣言」をまったくしていないのに、問題なく機能しているからです。例えば、対話型コマンドラインやファイルに a = 3 と入力したとき、変数 a が整数型であるとなぜわかるのでしょうか。また、その前に a が変数であることがなぜわかるのでしょうか。

こうした疑問を解消するには、まず Python のダイナミックな型付けについて知る必要があります。Python では、変数の型がプログラム実行時に自動的に決定されます。プログラム中での「宣言」に従って型が決められるわけではありません。前もって変数の型を宣言しなくてよいというのは、厳密性は失われますが、その分だけプログラミングが簡単になります。特にプログラミングの経験の浅い人にとってはメリットと言えます。

  1. 変数
    1. 予約語一覧
    2. 使用しない方が良い変数名一覧

数値

数値は、プログラムに経験がない人にとっても比較的わかりやすい型です。例えば、整数(小数部分のない数値)や、浮動小数点数(小数の部分のある数値)などについてはすぐに理解ができます。ただし、数値には理解に時間のかかるもの(無限精度の長整数、虚数部を持つ複素数、固定精度の小数、集合など)も含まれているので注意してください。

  1. 数値
    1. 数値への変換
    2. int 型の大きさ
    3. 四捨五入する: round, Decimal.quantize
      1. 四捨五入する: round() 関数
      2. 四捨五入する: decimal.quantize() 関数
      3. 四捨五入する: decimal.as_tuple() 関数

文字列

文字列は、文字情報を保持するオブジェクトです。「列」が付いているのは、複数の文字の「並び」を保持することができるからです。Python のオブジェクトはいくつかの種類に分かれますが、この文字列はシーケンスと呼ばれるオブジェクトの一種です。シーケンスというのは、オブジェクトを一定の順序に並べたものです。シーケンスでは、要素となるオブジェクトの順序が変化しません(左端が先頭、右端が末尾となります)。つまり、位置を指定して要素を追加したり、抽出したりすることができます。文字列は、文字のシーケンスと考えることができます。

  1. 文字列
    1. 文字列への変換
    2. 文字列を連結・結合する: +演算子
    3. 文字列のリストを連結・結合する: join()
    4. 文字列を指定して置換する: replace
    5. 正規表現で置換する: re.sub, re.subn
    6. 複数の文字を指定して置換する: translate

リスト・タプル・辞書・集合

本章では、リスト、タプル、辞書、集合という型について説明します。これらは、オブジェクトの集合であり、Python のプログラムの中で重要な役割を果たします。また、非常に柔軟性に富み、必要に応じて拡張や縮小が自由にできる、あらゆる種類のオブジェクトを構成要素にできる、ネストが無制限にできる、などの特徴を備えています。これらの型を利用すれば、かなり複雑な構造を持つデータでも、比較的簡単に作成、処理ができます。

  1. リスト
    1. リスト型への変換
    2. リスト要素の取り出し
    3. リスト要素の追加と削除
    4. リスト要素の計算と変換
  2. タプル
  3. 辞書
    1. 要素の追加と変更
    2. 辞書を結合する: update()
    3. 要素を削除する: del, clear()
    4. 要素を取得する
  4. 集合
    1. 集合の作成と変換
    2. 集合の追加と削除
    3. 和集合
    4. 差集合
    5. 積集合
    6. 対称差集合
    7. 部分集合か判定する: issubset()
    8. 上位集合か判定する: issuperset()
    9. 互いに素か判定する: isdisjoint()

条件分岐

この章では、if 文について解説します。if 文を使用すれば、状況によって何通りにも動作を変えるコードを作成することができます。if 文は、ステートメントの中にさらに別のステートメントが組み込まれる(ネストされる)という複合ステートメントの一種です。

復合ステートメントにネストされるステートメントは、単純に上から順にひとつずつ実行されるようにもできますが、特定の条件が満たされるかどうかによって実行されるステートメントが変わるようにもできます。

  1. if
    1. 比較演算子による条件指定
    2. 論理演算子による条件指定
    3. bool 型ではない条件指定

繰り返し処理

この章では、プログラムの中で同じ処理を繰り返し行うのに使用されるループについて解説します。Python では、ループの作成に whilefor のステートメントが使用されます。while はあらゆる種類のループに対応できるステートメントですが、forはシーケンスオブジェクトの個々の要素に順にアクセスし、それぞれについて同じ処理を行うために使用されるステートメントです。

  1. for
    1. 繰り返し処理を途中で抜ける: break
    2. 繰り返し処理を途中でスキップする: continue
    3. ループ正常終了後の処理: else
    4. 数値シーケンスの生成: range()関数
    5. リストの要素とインデックスを取得する: enumerate()関数
    6. 複数リストの要素(複数変数): zip()関数
    7. 逆順で繰り返し処理を行う: reversed()関数
    8. 多重の繰り返し処理を行う: itertools.product()関数
    9. 辞書型オブジェクトの繰り返し処理: for in
  2. while
    1. 繰り返し処理を途中で抜ける: break
    2. 繰り返し処理を途中でスキップする: continue
    3. ループ正常終了後の処理: else

関数

関数は、1つ以上のステートメントを組み合わせて作るプログラム構成単位で、一度書いておけば簡単に何度でも繰り返し実行でき、あらゆるプログラムで利用できます。また、様々な入力(引数、パラメータなどと呼ばれる)に対応でき、入力に応じて得られる結果が様々に変わるというのも関数の特徴です。関数は、様々な場面に応用ができる汎用のツールになり得ます。

関数は、Python プログラムの基本的な単位であり、コードの再利用性を高め、コードの冗長性を抑えるのに役立つものです。また、大きく複雑なシステムを小さく分割して扱いやすくできる、という利点もあります。関数は主に次の2つの目的で利用されます。

コードの再利用の促進、冗長性の排除
Python において、関数は「同じコードを繰り返し書く手間を省く」という目的で利用されます。これは、他の多くのプログラミング言語でも同じです。コードを関数という形にまとめておくと、そのコードは、あらゆるプログラムの中でいつでもすぐに利用することができます。大きなシステムを細かく分割するためのツールとしても使えます。よく使用するコードを関数にすることで冗長性を排除でき、保守の手間を省くこともできます。
プログラムの分割
関数は、システム(プログラム)を、それぞれに明確な役割を持ったいくつかの要素に分割する目的でも利用されます。多くの機能を備えたプログラムを一度に作るのは非常に困難です。しかし、行うべき作業ごとにプログラムをいくつかの関数に分ければ、かなり作成は容易になります。
  1. 関数
    1. 位置引数
    2. キーワード引数
    3. * による位置引数のタプル化
    4. ** によるキーワード引数の辞書化
    5. docstring
    6. グローバル変数
    7. 無名関数:ラムダ関数
  2. イテレータ
  3. ジェネレータ
  4. デコレータ

オブジェクトとクラス

Python では、関数の引数や戻り値はオブジェクトで、式での演算に使われるデータなどもすべてオブジェクトです。そして、関数やモジュールなどもそれ自体がオブジェクトです。しかし、オブジェクトを使っているからといって、それがオブジェクト指向プログラミングを行っているということにはなりません。オブジェクト指向プログラミングのためには、継承と呼ばれる概念について理解する必要があります。

プログラムとは、突き詰めれば、何らかの「物事」に対して何らかの処理を行うものと言うことができます。クラスとは、簡単に言ってしまえば、処理の対象となる「物事」に対応するものです。また、プログラムの中で現実の世界に存在する物事を表現するためのコードがクラスであると言ってもよいでしょう。

  1. クラス
  2. クラス変数とインスタンス変数
  3. メソッド
  4. アクセス制限
  5. コンストラクタ
  6. デストラクタ
  7. 文字列化
  8. 継承
  9. スーパークラス
  10. 多重継承
Category:
プログラミング
公開日:
更新日:
Pageviews:
1,844
Shares:
17
Tag:
Python