メソッドというのは、入力に対して何らかの処理を行う働きを持ちます。この働きは関数と同じです。メソッドはデータに対して操作する方法を提供するもので、「値.メソッド名()」あるいは「変数.メソッド名()」という形式で書きます。
例を示しましょう。append()はリストにつけるメソッドです。リスト型変数の要素に文字列が付けくわえられます。
In
z1 = ["a", "b", "c", "d"]
z1.append("e")
print(z1)
Out
['a', 'b', 'c', 'd', 'e']
関数とメソッドの違いを端的に書けば、以下のようになります。
関数:単独で呼び出せる
メソッド:変数や値に紐づけて読み出す
何でこのようなものが存在するかと言えば、データとメソッド(命令)をセットで扱いたいからです。このようなプログラミングの考え方はオブジェクト指向と呼ばれます。複雑で規模の大きなプログラムを作るために考え出されたもので、データとメソッドを組みにして部品とし、この部品を組み合わせてプログラムを構成していきます。この部品のことをオブジェクトといいます。
リストの要素を並べ替える機能を持った関数とメソッドを見てみましょう。組み込み関数ならsorted()、メソッドならsort()を使います。
In
# 関数sorted
a1 = [3, 2, 5, 4, 6, 0, 7, 1]
print(sorted(a1))
print(a1)
# メソッドsort
a1.sort()
print(a1)
Out
[0, 1, 2, 3, 4, 5, 6, 7]
[3, 2, 5, 4, 6, 0, 7, 1]
[0, 1, 2, 3, 4, 5, 6, 7]
注目する点は、処理前後で変数a1の要素が変化しているかどうかです。関数sortedの場合、リスト変数a1の要素に変化はありません。メソッドsortの場合、リスト変数a1の要素自体が変更されています。
紛らわしいことに、すべてのメソッドが変数の中身を変更するわけではありません。次のメソッドupper()を見て下さい。upper()は、文字列をすべて大文字にして返すメソッドです。メソッドupper()は、変数の中身の文字列「this is a pen.」自体を大文字には変更していません。
In
a2 = "this is a pen."
print(a2.upper())
print(a2)
Out
THIS IS A PEN.
this is a pen.
メソッドcount()は、()で指定した文字列が幾つ含まれているかを数えて返します。「this is a pen.」には、「i」が二つ含まれています。
In
a2 = "this is a pen."
print(a2.count("i"))
Out
2
format()メソッドは定型文章の中に任意の値を代入して、文字列を生成します。定型文章をダブルクォーテーション""で囲み、その中で任意が入る位置を括弧 { } で囲みます。format()の引数に与えた値を挿入した文字列を返します。定型文章に値を差し込むので、差し込み処理ということがあります。
以下のように書きますと、文字列xxxと文字列yyyの間の{}に、format()メソッドの引数に入る値が差し込まれます。
"xxx{}yyy".format(z)
In
age = 52
a3 = "私は{}歳です。".format(age)
print(a3)
Out
私は52歳です。
In
a4 = "私の所属は{}学習センターで、コースは{}です。".format("千葉", "情報")
print(a4)
Out
私の所属は千葉学習センターで、コースは情報です。
{}の中に番号を書いて、format()の引数の中から指定した順番の値を差し込むこともできます。番号は0から始まることに注意します。同じ番号を複数書くと、同じ値を複数差し込むことができます。
In
s1 = "私は{2}年に入学しました。所属は{0}学習センターで、コースは{1}です。"
year = 2020
a5 = s1.format("千葉", "情報", year)
print(a5)
Out
私は2020年に入学しました。所属は千葉学習センターで、コースは情報です。
index()メソッドは、リストの要素の中から、指定した値が存在するかを検索します。指定した値が存在すれば、そのインデックス番号を返します。指定した値が存在しなければ、「ValueError」というエラーになります。インデックス番号は、リストの要素を順に数えた番号でした。これも、0から始まります。
In
z1 = ["a", "b", "c", "d", "e"]
print(z1.index("a"))
Out
0