文字列などのデータには、そのデータを操作するための、専用の 関数 が結びついています。
たとえば、文字列データには、その文字列の文字をすべて大文字に変換した文字列を作成する関数 upper()
があります。upper()
は、次のように使います。
text = "lower letters" # 変数 text に 文字列 "lower letters"を代入
uppered_text = text.upper() # upper() メソッドで、大文字を作成
print(uppered_text)
lower letters
の文字をすべて大文字に変換した文字列が、戻り値となっているのがわかると思います。
このように、データに結びついた関数のことを、メソッド と呼びます。メソッドは、次のように呼び出します。
データ.メソッド名(引数1, 引数2, 引数3, ...)
上で紹介した、
text = "lower letters" # 変数 text に 文字列 "lower letters"を代入
uppered_text = text.upper() # upper() メソッドで、大文字を作成
というプログラムでは、lower letters
というデータの、upper()
というメソッドを呼び出しています。
文字列のfindメソッド¶
もう一つのメソッドの例として、文字列データのメソッド find()
を紹介します。find()
メソッドは、文字列の中に、ある文字列があるかどうか調べるメソッドです。
たとえば、The shells she sells are sea-shells, I'm sure.
という文字列に sea
という文字列が含まれているかどうか調べる場合は、次のように書きます。
text = "The shells she sells are sea-shells, I'm sure."
text.find("sea")
この例では、The shells she sells are sea-shells, I'm sure.
というデータの find()
メソッドを、sea
という引数を指定して呼び出しています。
find()
メソッドは、引数で指定した文字列が含まれていれば、その位置を戻り値として返します。この例では、The shells she sells are sea-shells, I'm sure.
の、25番目の文字が sea
となっています。(注:先頭の文字を0番目として数えて、25番目です。Pythonでは、順序は常に 0
から数えます。)
メソッドと関数¶
メソッドは 関数 の一種です。これまで見てきたように、特定のデータに結びつき、
データ.メソッド名()
の形式で呼び出してデータを操作する関数を、メソッド と呼びます。
メソッド は、結びついている データ を対象として、処理を行います。例えば、
"lower letters".upper()
は、文字列データの lower letters
に結び付けられた upper()
メソッドを呼び出しています。upper()
メソッドは、結びついているデータである lower letters
を大文字に変換します。
一方、関数 は、特定のデータには結びついておらず、操作する対象のデータを引数として指定します。たとえば、abs() 関数 では、絶対値を求める対象の数値データを、
abs(-100)
のように、引数として指定します。
このように、Pythonが提供する機能には、abs()
のように 関数 として提供されているものと、 文字列.upper()
のように メソッド として提供されているものがあります。特定のデータに強く結びつき、利用頻度が高い処理はメソッドとして使えるようになっており、それ以外の処理は関数として使えるようになっていることが多いようです。
メソッドとデータ¶
Pythonのデータには、その種類に応じて、別々のメソッドが用意されています。上で紹介した upper()
メソッドや find()
メソッドは、文字列データだけで使える、専用のメソッドです。たとえば、upper()
メソッドを数値データに使おうとすると、次のようなエラーになります。
data = 10000
data.upper()
数字に大文字も小文字もありませんから、数値にはこんなメソッドは必要ありませんね。
逆に、数値には数値で、別に専用のメソッドが用意されています。例えば、数値データには as_integer_ratio()
メソッドが用意されており、実数 を分数のように2つの整数の比で表します。
たとえば、実数の 0.5
は $\frac{1}{2}$ ですから、as_integer_ratio()
メソッドを使うと、
data = 0.5
data.as_integer_ratio()
のように、 1
と 2
の比である、と求められます。
この「値を整数の比で表す」というのは、数値だけで有効な処理です。数値以外の、文字列などのデータを「整数の比で表わす」といわれても困ってしまいます。ですから、as_integer_ratio()
メソッドは数値データ専用のメソッドで、文字列データで使おうとすると次のようにエラーになります。
data = "abracadabra"
data.as_integer_ratio()
このように、データはその種類ごとに、専用のメソッドをたくさん持っています。すべてのメソッドを紹介することはできませんが、Python公式サイトには、文字列データのメソッド一覧 や 数値データのメソッド一覧 がありますので、興味があれば参照してみてください。
text = input("アルファベットを入力してください:") # 変数 text に文章を入力
lower_text = text.lower() # 入力した文字列を小文字に変換
print(text, "を小文字に変換すると、", lower_text, "になります。")
この例では、変数 text
の、lower()
メソッドを使って、小文字に変換した文字列を作っています。
ここで、 lower()
メソッドを呼び出したあとでも、変数 text
に代入した文字列は大文字のままで、小文字には変換されていない、という点を確認してください。文字列の lower()
メソッドは、変数 text
の文字列を 変更 するメソッドではなく、あたらしく小文字からなる文字列を 作成 するメソッドなのです。