A. Pythonイントロダクション#
A.1. はじめに#
本書でで初めてPythonに触れる読者のために、Pythonの基本的な機能を簡単に説明する。
なお、入力例の行頭の「$」「>>>」はそれぞれ、ターミナルとPythonのプロンプトを示しており、入力する必要はない。また「#」以降はコメントを表している。
A.2. help, ipython#
A.2.1. help#
Pythonの実行中に次のように使用することで説明文を表示する。
>>> help('Manyo.ElementContainer')
もし、使い方を知らない変数(仮にsomethingとしよう)が出てきた場合も、次のようにして説明文を表示できる。
>>> help(something)
A.2.2. ipython#
ipythonはPythonの高機能なインターフェースである。その機能の一つにタブキーによる補完機能がある。メソッド名やファイル名、変数名などを途中まで入力しタブキーを押せば、補完、あるいは、候補の列挙を行う。例えばElementContainerのメソッド名を忘れてしまっても、
>>> ec = Manyo.ElementContainer()
>>> ec.
まで、入力しタブキーを押せば、ElementContainerのメソッド全てが表示される。
>>> ec = Manyo.ElementContainer()
>>> ec.
ec.Add ec.InputUnitHeader ec.PutE ec.PutTableSize ec.ReduceColumnList
ec.AddBlankVector ec.Integrate ec.PutEKey ec.PutUnit ec.Remove
ec.AddToHeader ec.LoadTextFile ec.PutEList ec.PutUnitHeader ec.Replace
ec.AppendValue ec.MaskedDiv ec.PutHeader ec.PutUnitHeaderPointer ec.Reverse
ec.Ave ec.MaskedMul ec.PutHeaderPointer ec.PutX ec.SaveTextFile
ec.Averaging ec.MaskedPlus ec.PutHistKeyList ec.PutXKey ec.SaveToBinFile
(以下略)
もう一つの便利な機能はログ機能である。ipythonを利用中に
>>> %logstart
と入力すると、それ以降の入力がファイルに保存される。そのログファイルは、ほとんどそのままでスクリプトとして再利用できる。 ipythonを終了するには、「 Ctrl+d 」を入力する。
A.3. import#
Pythonは様々なライブラリ(パッケージやモジュールと呼ばれる)の機能を利用できる。ライブラリは次のようにimportすることで利用出来るようになる。
>>> import math
これにより、数学関数モジュール math が読み込まれる。 モジュールに含まれる関数を用いるにはモジュール名に「.」(ドット)と関数名を続ける。
>>> math.sqrt(2)
また、importの際に、asを使ってモジュール名に別名を付けることができる。
>>> import os.path as pth
これでパス名操作用モジュール os.path を読み込み pthという別名を付ける。利用方法は次のようになる。
>>> pth.abspath('.') # カレントディレクトリの絶対パス
'/home/hogehoge/fugafuga/~'
以下によく使うモジュールの表を挙げる。
モジュール名 |
説明 |
---|---|
math |
数学関数、定数 |
os.path |
パス名操作 |
sys |
Pythonに関する変数、関数 |
time |
時間に関する関数 |
A.4. printと文字列#
A.4.1. 文字列その1#
Pythonでの文字列は「'」(シングルクォート)、「"」(ダブルクオート)、「'''」もしく「"""」トリプルクォートで囲む。
>>> s = 'Tokai'
文字列中にシングルクォートやダブルクオートを含めたい場合には、それぞれ他方のクォートで囲む。
A.4.2. print#
Pythonで文字列を表示するために用いるのがprintである。例えば、次のように用いる。
>>> print('Hello, world')
Hello, world
「,」(カンマ)で区切ると、空白区切りで連続して表示される。
>>> print('Tokai', 'Naka', 'Ibaraki')
Tokai Naka Ibaraki
A.4.3. 文字列その2#
文字列中に変数の値を代入するには文字列の後に「%」を付け、その後に変数を羅列する。
>>> t = 12.345
>>> unit = 'K'
>>> print('Temperature: %.2f %s'%( t, unit))
Temperature: 12.35 K
A.5. データ型#
Pythonの主なデータ型を次に示す。
文字列 |
str |
|
整数 |
int |
signed、 unsingedの区別は無い |
浮動小数 |
float |
|
リスト |
list |
配列 |
タプル |
tuple |
変更不可能な配列 |
辞書 |
dict |
連想配列 |
Pythonでは変数を新たに用いる際に、C言語のようにデータ型を明示的に示す必要がない。 変数の型を知りたいときにはtype関数を用いる。
>>> x = 10
>>> type(x)
int
また、型の変換は次のようにして行える。
>>> y = float(x)
>>> type(y)
float
また、ある変数が、求める型であるかの真偽を確認するにはisinstance関数を用いる。
>>> isinstance(ec, Manyo.ElementContainer)
True
A.6. list#
リストは次のように「[ 」と「]」で囲うことで作成する。
>>> l = ['SIK', 'DNA', 'BIX', 'NRI']
リストから値を取り出す方法はC言語の配列と同じである。
- ::
>>> l[1] 'DNA'
また、次のような方法で、リストの一部を得られる。
>>> l[1:3]
['DNA', 'BIX']
>>> l[2:]
['BIX', 'NRI']
要素を指すためのインデックスに負の数字を使うこともできる。
>>> l[-1]
'NRI'
>>> l[-2:]
['BIX', 'NRI']
リストに関係する関数などを紹介しておく。
A.6.1. len(list)#
リストの長さを返す。
>>> len(l)
4
A.6.2. append(item)#
リストの最後に要素を追加する。
>>> l.append('NOP')
>>> print l
['SIK', 'DNA', 'BIX', 'NRI', 'NOP']
A.6.3. remove(item)#
リストの中身からitemを削除する。itemがリスト中に無い場合はエラーになる。
>>> l.remove('DNA')
>>> print l
['SIK', 'BIX', 'NRI', 'NOP']
A.6.4. sort()#
昇順でリストの中身を並び替える。
>>> l.sort()
>>> print l
['BIX', 'NOP', 'NRI', 'SIK']
A.6.5. reverse()#
リストの中身を逆順に並び替える。
>>> l.reverse()
>>> print l
['SIK', 'NRI', 'NOP', 'BIX']
A.6.6. range(start, end, step)#
startからend(の手前)までstepおきの、整数リストを返す。start、stepは省略できる。
>>> range(5)
[0, 1, 2, 3, 4]
>>> range(-2,2)
[-2, -1, 0, 1]
>>> range(0, 100, 20)
[0, 20, 40, 60, 80]
A.7. if, for, while, try#
プログラミングに欠かせない制御文を紹介する。
A.7.1. 制御の区切り#
制御文の文末は「:」(コロン)で示す。また、制御文の影響下に置かれるまとまりをインデントの数で区別する。インデントは空白でもタブでもよいが、一区切りのインデント数は一つのソースコードの中で一定でなければならない。
A.7.2. if...elif...else...#
import random # randomは様々な乱数を扱うモジュール
1a = random.randint(-10, 10) # randintは二つの引数の間の整数をランダムに返す
2if a < 0:
3 print 'Negative'
4elif a == 0:
5 print 'Zero'
6else:
7 print 'Positive'
elifは何回でも使える。elseは一回のみ使える。どちらについても、使わなくても良い。
A.7.3. for...else...#
foriteminlist:で始める。listの内容を一つずつ取り出して、変数itemに代入し、それ以降の処理を行う。breakされないでループを終えた場合、elseの処理を行う。elseは使わなくても良い。
1l = ['SIK', 'DNA', 'BIX', 'NRI']
2for bl_name in l:
3 print bl_name
4else:
5 print 'Iteration ends.'
A.7.4. while...else...#
条件が成り立っている間、ループを続ける。成り立たたずにループを抜けた後にelseの処理を行う。breakされてループを抜けた場合はelseの処理は行わない。elseは使わなくても良い。
1bl_code = raw_input('Choice your BL. %s >'%(l))
2while bl_code not in l:
3 print "Not found."
4 bl_code = raw_input('Choice your BL. %s >'%(l))
5else:
6 print 'Good!'
A.7.5. try...except...#
エラーが起こった場合に別処理を行う。
1a = random.randint(0,3)
2try:
3 b = 10/a
4except:
5 print "Error"