ゼロからのPython入門講座文字列と入出力

メソッド

文字列print() 関数input() 関数メソッド文字列の演算子と数値

文字列などのデータには、そのデータを操作するための、専用の 関数 が結びついています。

たとえば、文字列データには、その文字列の文字をすべて大文字に変換した文字列を作成する関数 upper() があります。upper()は、次のように使います。

In [1]:
text = "lower letters" # 変数 text に 文字列 "lower letters"を代入
uppered_text = text.upper() # upper() メソッドで、大文字を作成
print(uppered_text)
LOWER LETTERS

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 という文字列が含まれているかどうか調べる場合は、次のように書きます。

In [2]:
text = "The shells she sells are sea-shells, I'm sure."
text.find("sea")
Out[2]:
25

この例では、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のデータには、その種類に応じて、別々のメソッドが用意されています。上で紹介した lower() メソッドや find() メソッドは、文字列データだけで使える、専用のメソッドです。たとえば、lower() メソッドを数値データに使おうとすると、次のようなエラーになります。

In [3]:
data = 10000
data.lower()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-e08234dbcae2> in <module>
      1 data = 10000
----> 2 data.lower()

AttributeError: 'int' object has no attribute 'lower'

数字に大文字も小文字もありませんから、数値にはこんなメソッドは必要ありませんね。

逆に、数値には数値で、別に専用のメソッドが用意されています。例えば、数値データには as_integer_ratio() メソッドが用意されており、実数 を分数のように2つの整数の比で表します。

たとえば、実数の 0.5 は $\frac{1}{2}$ ですから、as_integer_ratio() メソッドを使うと、

In [4]:
data = 0.5
data.as_integer_ratio()
Out[4]:
(1, 2)

のように、 12 の比である、と求められます。

この「値を整数の比で表す」というのは、数値だけで有効な処理です。数値以外の、文字列などのデータを「整数の比で表わす」といわれても困ってしまいます。ですから、as_integer_ratio()メソッドは数値データ専用のメソッドで、文字列データで使おうとすると次のようにエラーになります。

In [5]:
data = "abracadabra"
data.as_integer_ratio()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-e9e6a8377fa6> in <module>
      1 data = "abracadabra"
----> 2 data.as_integer_ratio()

AttributeError: 'str' object has no attribute 'as_integer_ratio'

このように、データはその種類ごとに、専用のメソッドをたくさん持っています。すべてのメソッドを紹介することはできませんが、Python公式サイトには、文字列データのメソッド一覧数値データのメソッド一覧 がありますので、興味があれば参照してみてください。

練習問題

input() 関数で入力した文字列を、すべて小文字に変換して表示するプログラムを書いてみましょう。

文字列の lower() メソッドで、小文字に変換した文字列を作成できます。

回答例

In [20]:
text = input("アルファベットを入力してください。")  # 変数 text に文章を入力
lower_text = text.lower()  # 入力した文字列を小文字に変換
print(text, "を子文字に変換すると、", lower_text, "になります。") 
HELLO WORLD を子文字に変換すると、 hello world になります。

この例では、変数 text の、lower() メソッドを使って、小文字に変換した文字列を作っています。

ここで、 lower() メソッドを呼び出したあとでも、変数 text に代入した文字列は大文字のままで、小文字には変換されていない、という点を確認してください。文字列の lower() メソッドは、変数 text の文字列を 変更 するメソッドではなく、あたらしく小文字からなる文字列を 作成 するメソッドなのです。



【Copyright © 2001-2020 python.jp】 【Privacy Policy】 python_japan