「関数」と「メソッド」って何が違うの? Pythonを学び始めたばかりの頃は、よくこんな疑問が浮かびます。
そんなの「どっちでもいいじゃん(笑)」という声が聞こえてきそうですが、初心者のうちに違いを明確にしておくと、のちの理解がとても楽になります。
ということで、この記事ではPythonにおける「関数」と「メソッド」の違いを初心者向けに「ざっくり」解説します。
あくまで「ざっくり」なので、あまり期待せずに読み進めてください。
関数とは
関数とは、呼び出されたときに実行される処理のかたまりです。
つまり、やりたいことをまとめて、一度呼び出せばいろいろやってくれるもの。
例として、文字列の長さを調べる「len」という関数を使ってみます。
len('Hello')
実行すると、
5
となります。
このように、"Hello"
という文字列をlen()
に渡して処理し、その結果(長さ)を返してくれます。
「’Hello’」 という文字列をlen関数で処理した結果は「5」と返ってきました。
関数の定義と呼び出し
また、関数は簡単に定義し、呼び出すこともできますね。
例えば以下のように関数を定義し、
def add(a, b):
total = a + b
return total
この関数addを呼び出すとします。
その際、引数を二つ渡すことで、add関数では二つの値を加算した変数totalをreturnで呼び出し元に返すのです。
point = add(10, 20)
print(point)
戻された結果(30)は変数pointに入り、これをprint文で出力しています。
30
このように、処理をまとめて呼び出すという仕組みが関数です。
メソッドとは
*どう頑張っても初心者には多少難しい説明になることをご了承ください。
メソッドとは、オブジェクトにひもづいた関数のことです。
Pythonでは「すべてがオブジェクト」と言われるほど、あらゆるデータ型がオブジェクトとして扱われます。
メソッドを利用する基本は、
オブジェクト.メソッド名(引数)
です。
例として、upperメソッドを使ってみましょう。
upperメソッドは、すべての英字を大文字に変換します。
たとえば、文字列"Hello"
もオブジェクトなので、メソッドを使って操作できます。
'Hello'.upper()
上記のように直接値を書くようなことはせず、以下の方が実務的です。
name = 'Hello'
name.upper()
実行すると、
'HELLO'
となります。
この.upper()
は、「文字列オブジェクト」に対するメソッドです。
メソッドの定義と呼び出し
関数と同様に、メソッドも独自に定義して呼び出すことができます。
ただし、結構面倒です。
例えば、上の関数の例と同じように「2つの値を渡して足し算した結果を受け取る」というメソッドを作る場合、下のようにクラスを定義し、その中に関数(メソッド)を定義します。
class Sample:
def __init__(self, a, b):
self.a = a
self.b = b
def add(self):
self.total = self.a + self.b
return self.total
クラスについて分からない方はもう読み飛ばしてください。
ここでは、クラスSampleに初期化メソッド( __init__ )とaddメソッドを定義しました。
初期化メソッドはインスタンス変数 a と b を取り扱うことができます。
このメソッドを呼び出すために、インスタンスを生成し、そのインスタンスに対してメソッドを呼び出すようにします。
point = Sample(10, 20)
total = point.add()
print(total)
これで、addメソッドを呼び出すことができるため、変数totalには計算結果が入り、print文で出力されていることになります。
30
具体的な処理と結果の違いで比較
次に、「並べ替え」という処理について、関数とメソッドの結果を見比べてみましょう。
まずは、リストの並び替えを行う.sort()メソッドです。
numbers = [3, 1, 4, 1, 5]
numbers.sort() # メソッド
print(numbers)
出力結果はこちら。
[1, 1, 3, 4, 5]
このように、sort()
は「リストオブジェクトに対して操作するメソッド」です。
対して、同じように並び替えができるsorted()
関数を使います。
numbers = [3, 1, 4, 1, 5]
print(sorted(numbers)) # 関数
実行結果は同じです。
[1, 1, 3, 4, 5]
両者を比較すると、
sorted()
:リストを引数として受け取る関数.sort()
:リスト自身を操作するメソッド
という違いがあります。
関数とメソッドの違い
関数とメソッドの違いとして、「 . 」ピリオドを付けるのがメソッドで、それ以外は関数と考えがちですが、必ずしもそうではありません。
例えば、sqrt()関数は、クラスではなくモジュールであるmathに関連付けられているからです。
両者の違いを一言で言い表すと、
- 関数:操作の対象を引数で渡す
- メソッド:インスタンス(オブジェクト)として渡す
となりますが、結局は何かしらの処理が行われているという意味では基本的に同じと考えて構いません。
初心者のうちの理解としては、
- 関数は、いくつかの処理がまとめられていて一度に実行できるもの
- メソッドは、オブジェクトに対して処理する
というように「ざっくり」理解して良いです。
また、ユーザーが独自の関数(メソッド)を定義する際、手軽に処理をまとめたい時は関数を定義すれば良いですし、インスタンスに対して何かしら処理をしたい場合はメソッドを定義すれば良いということになります。
まとめ
今回はPythonにおける「関数」と「メソッド」の違いについて解説しました。
関数は分かりやすいと思いますが、メソッドはクラスを理解していないと少し難しかったかもしれませんね。
この記事をきっかけに、Pythonの魅力が少しでも伝わり、好きになってもらえたら嬉しいです。
本当に「ざっくり」と解説しましたが、もっと知りたいという方はぜひフォームやコメントでお知らせください。
Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。
それでは、ステキなPythonライフを!