Python入門とライブラリの使い方 | Raspberry Piを使ってPythonを学ぼう 第2回
RaspberryPiを使って何かを作ろうとするとRaspberryPi上で動くプログラムを書くことになります。本シリーズではPythonをメインの言語として使いRaspberryPiを操作していきます。そのためにPythonのよく使う文法と標準ライブラリを紹介します。Rasbianには標準でPythonが入っています。そのためPythonのインストール作業は不要です。
Pythonのバージョン
実はRasbianにはPythonが2つインストールされています。Python2.xとPython3.xです。 python
コマンドを実行するとPython2.xが起動します。Python3.xを使う場合は python3
を実行すれば良いでしょう。
バージョンは -V
オプションを使うことで確認できます。
前回インストールしたRasbianにはPython2.7.9とPython3.4.2がインストールされていることがわかります。今回はpython3を使います。
なにはともあれHello world
プログラムを始めるときはまず Hello world を表示することから始めるという暗黙のルールがあります。それに習い Hello world を表示するプログラムを書いて実行しましょう。
ファイルの記述にはエディタを使います。RasbianにはVimがインストールされているのでそれを使うと良いでしょう。その他のエディタを使いたい方は好みのものをお使いください。
viコマンドの第一引数に作成もしくは編集するファイルのパスを指定します。
すると hello_world.py が編集できます。Vimの詳しい使用方法はWebなどをご参照ください。(Wikipediaにも簡単な使い方が記載されています https://ja.wikipedia.org/wiki/Vim)
hello_word.py に以下を記述します。
それでは実行してみましょう。実行は python3 コマンドの第一引数に実行するファイルのパスを指定します。
無事、表示されました。
インタラクティブシェル
インタラクティブシェルとは対話形式でプログラムを行う実行方法です。コード片やライブラリの使い方を実際に調べたりする場合にとても便利です。 Pythonのインタラクティブシェルは python3 コマンドを引数なしで実行すると起動することができます。終了するにはCtr-Dを押すかインタラクティブシェルに quit() を記述しエンターを押します。
以降、行頭が >>>
で始まるスニペットはPythonのインタラクティブシェルとします。
データ型
Pythonは動的型付けの言語なので型宣言をする必要はありません。ただし値には型があります。代表的な型とその取り扱いを説明します。 型は組み込み関数type()で調べられます。
str
文字列型です。先ほどの 'Hello world' も文字列型の値です。文字列を定義するときはシングルクォート(')もしくはダブルクォート(")で囲みます。
また3重に囲むことで複数の行にまたがる文字列を定義できます。
その他、幾つかの文字列を例示します。
注意しなければならないのは文字列型は通常はファイルに書き込むことはできません。 ファイルに書き込むには後述のバイト列にする必要があります。 文字列 -> バイト列の変換はencode()メソッドを使います。
bytes
バイト列型です。バイト列は文字列定義の先頭にb文字をつけて定義します。
バイト列は文字列と同様の操作ができます。またバイト列はファイルの書き込みなどに使えます。 バイト列 -> 文字列への変換はdecode()メソッドを使います。
int
整数型です。通常の演算などは以下のように行います。
四則演算は次のように行います。
少数を切り捨てて整数だけ取得したい場合は // を使います。
剰算は % を使います。
冪乗算は ** を使います。
割り算はPython2では少数切り捨ての整数になります。
リスト
リストとは値などが順番を持ちながら入れることができるオブジェクトです。 []を使って生成できます。
要素の追/取得/削除は次のように行います。
要素数以上の値を指定して要素を取得しようとするとIndexError例外が送出されます。
要素の取得の値を負の値にすると後ろ側から数えた番号となります。
リストは要素を変更したり、要素を追加したりできます。これらの変更ができないtupleというデータ型もあります。
ディクショナリ
連想配列と呼ばれるものでキーと値をペアで登録できるオブジェクトです。{}を使って生成します。
このディクショナリはidという名前の値には1が、pointという名前の値には1000が入っています。
ディクショナリは次のように操作できます。
名前が設定されていないものを取得しようとする場合はKeyError例外が送出されます。
制御構文
if elif else
if に続く条件がTrueのときにifの中のブロックを実行します。ifに続けてelifやelseなどの構文も使えます。
for in
forはinに続くリストやリストのような反復可能なオブジェクト(イテレータという)の要素を一つづつ取得して、その要素の数だけブロック内の処理を行います。
この例ではprint(ii)は3回行われます。またPythonではforにもelseを使えます。これはループが途中で止まることなく実行された場合のみelseのブロックが実行されます。
while
whileもループの一つです。whileに続く式がFalseになるまでブロックが実行されます。そのため以下の書き方をすると無限ループになります。
ループの脱出にはbreakを使います。
例外
例外はプログラムのエラーなどを伝達するためのものですが、Pythonではもっと広く例外を使います。これまでに出てきたIndexErrorやKeyErrorも例外です。
例外はraiseによって送出できます。以下はKeyErrorを送出しています。
送出したエラーはプログラム内で受け取って処理を変えたいことがよくあります。try excepを使うと例外を取得できます。
ライブラリ
Pythonにはとてもたくさんのライブラリが標準で入っています。それらを使うことで少ないコードで機能を実現することができます。ここでは幾つかのライブラリを紹介します。
ライブラリを使うためにはimport文でインポートする必要があります。
re - 正規表現
reモジュールは正規表現用のモジュールです。re.match()で文字列マッチングができます。またre.search()で文字列検索ができます。第一引数が正規表現で第二引数が検索を行う文字列です。パターンに一致するとマッチオブジェクトが返されます。一致しない場合はNoneが返されます。
reモジュールは拡張正規表現を使うことができます。またPython独自の正規表現拡張もあります。詳しくはPythonドキュメントの日本語訳をみると良いでしょう。 http://docs.python.jp/3.3/library/re.html
json - JSON形式
JSON形式は元はJavascriptのディクショナリの形式でしたが、構造化されたデータをXMLよりも短く記述でき、その手軽さから他の言語にもこの形式を処理する機能がサポートされるようになりました。Web APIでもよく使われています。PythonではJSON形式の文字列をPythonのリストやディクショナリに当てはめてPythonの組み込み型のobjectとして扱うことができます。PythonオブジェクトをJSON形式の文字列にすることをシリアライズ、その逆をでシリアライズと呼びます。シリアライズとデシリアライズは以下のように行います。
詳しくはPythonドキュメントの日本語訳をみると良いでしょう。 http://docs.python.jp/3.3/library/json.html
sqlite3 - SQLite3 ファイルベースのデータベース
sqlite3はファイルベースのデータベースです。データベースを作成してSQLを発行してデータの検索などを行えます。サービスとして使うには機能が乏しいので難しいですが、開発用や一時的に使うだけであれば、手軽で使いやすいです。簡単なデータベースを作成して操作してみましょう。
DBを作成します。
cursorを取得してuserテーブルを作成します。
userテーブルにデータをインサートします。
インサートしたデータをセレクトします。
データが取得できたことがわかります。SQLはexecute()メソッドを使って実行します。詳しくはPythonドキュメントの日本語訳をみると良いでしょう。 http://docs.python.jp/3.3/library/sqlite3.html
pdb
デバッガです。Pythonには標準でデバッガが付いており、処理の途中でインタラクティブに操作してデバッグを行いたいときに役に立ちます。処理を止めたい箇所に次のコードを記述して実行することで、その場所に処理が来たときにインタラクティブなデバッガに遷移することができます。
標準ではありませんがサードパーティライブラリにipdbというpdbの拡張版もあります。
詳しくはPythonドキュメントの日本語訳をみると良いでしょう。 http://docs.python.jp/3.3/library/pdb.html
まとめ
この章では以下のことを学びました。
- Pythonの実行方法
- 基本的なデータ型と制御構文
- 標準ライブラリの使い方
次回はこの章で学んだことを使ってRaspberryPiを実際に制御していきます。
著者プロフィール:嶋田健志
フリーランスのWebエンジニア。
主に Python を用いて Webサイトやソフトウェア の開発を行っている。
共著書に 「Pythonエンジニア養成読本 (技術評論社) 」がある。
関連記事
・ RasberryPiにOSをインストール | Raspberry Piを使ってPythonを学ぼう 第1回・ beautifulsoup4でWebスクレイピング | Raspberry Piを使ってPythonを学ぼう 第3回
・ 2016年の人気プログラム言語10種を徹底比較!気になる年収や求人、学習難易度まで
・ プログラマー年収ランキング2016!言語別、第1位はPythonの651万円
・ PythonのWebフレームワーク「Django」徹底解説!