そんなの「どっちでもいいじゃん(笑)」という声が聞こえてきそうですが、初心者のうちに違いを明確にしておくと、スッキリします。
ということで、この記事ではPythonにおける「関数」と「メソッド」の違いを初心者向けに「ざっくり」解説します。
あくまで「ざっくり」なので、あまり期待せずに読み進めてください。
関数とは
呼び出されたときに実行されるコードの集まり=処理のかたまりです。
つまり、やりたいことをまとめて、一度呼び出せばいろいろやってくれるもの。
例として、文字の長さを調べる「len」という関数を使ってみます。
len('Hello')
実行すると、
5
となります。
これは、(カッコ)内で指定した文字列を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」をupperメソッドで大文字にします。
'Hello'.upper()
上記のように直接的なことはせず、以下の方が実務的です。
name = 'Hello'
name.upper()
実行すると、
【実行結果】
'HELLO'
となります。
メソッドの定義と呼び出し
関数と同様に、メソッドも独自に定義して呼び出すことができます。
ただし、結構面倒です。
例えば、上の関数の例と同じように「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
関数とメソッドの違い
関数とメソッドの違いとして、「 . 」ピリオドを付けるのがメソッドで、それ以外は関数と考えがちですが、必ずしもそうではありません。
例えば、sqrt()関数は、クラスではなくモジュールであるmathに関連付けられているからです。
両者の違いを一言で言い表すと、
- 関数:操作の対象を引数で渡す
- メソッド:インスタンス(オブジェクト)として渡す
となりますが、結局は何かしらの処理が行われているという意味では基本的に同じと考えて構いません。
初心者のうちの理解としては、
- 関数は、いくつかの処理がまとめられていて一度に実行できるもの
- メソッドは、オブジェクトに対して処理する
というように「ざっくり」理解して良いです。
また、ユーザーが独自の関数(メソッド)を定義する際、手軽に処理をまとめたい時は関数を定義すれば良いですし、インスタンスに対して何かしら処理をしたい場合はメソッドを定義すれば良いということになります。
まとめ
今回はPythonにおける「関数」と「メソッド」の違いについて解説しました。
関数は分かりやすいと思いますが、メソッドはクラスを理解していないと少し難しかったかもしれませんね。
この記事をきっかけに、Pythonの魅力が少しでも伝わり、好きになってもらえたら嬉しいです。
本当に「ざっくり」と解説しましたが、もっと知りたいという方はぜひフォームやコメントでお知らせください。
Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。
それでは、ステキなPythonライフを!