道具としての関数
部屋に合った新しい家具を買うとき、どれくらいのサイズなら収まるかを確認する必要があります。こんなとき、メジャーを使って寸法を測ります。メジャーのような便利な道具があると、作業が簡単に達成します。
Pythonにおけるプログラミングも同様です。プログラミングをしている途中で、「ここでこんな処理をしたい!」と思ったとき、それを即座にやってくれる道具があると便利です。その1つが関数と呼ばれるものです。
実際に使ってみましょう。
Pythonには、メジャーのようにモノの長さを測る道具として使えるlenと呼ばれる関数があります。
lenを使って文字列の長さを測ってみましょう。
関数の使い方は、lenに続いて丸括弧で長さを測りたい文字列を囲みます。
>>> len( 'Python')
6
Pythonという文字列は6文字なので、6という整数が返ってきます。
関数の仕組み
lenで長さを測りたいのは、'Python'という文字列でした。このことを関数に伝えるために、関数の名前に続けて丸括弧を使って指定しました。関数を実行するときに、「この文字列の長さを測ってほしい」という内容を追加指示を出すことがよくあります。これらの指示は関数の後ろに丸括弧を付けて書きますが、これを関数の引数(ひきすう)と呼びます。
文字列の長さを測った結果は6文字だったので、6という整数が関数から返ってきました。このように、関数を実行した結果として返ってくるデータを戻り値(もどりち)と呼びます。
実は、lenはリストの長さも測れます。
>>> len( [1,2,3] )
3
このリストの要素は、1から3までの3つですので長さは3です。この場合、リスト型データが引数となり、戻り値は3となります。
データを文字列に変換する関数 str
Pythonで数値計算するのは簡単です。
>>> 3 + 2
5
実は、数字だけでなく文字列も同じように足し合わせることができます。
>>> 'abc' + 'def'
'abcdef'
いくつかの文字列を+記号で繋げると1つの文字列になって返ってきます。
では、文字列と数値は足すことができるのでしょうか。
>>> 'Python' + 3.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be str, not float
予想ではPython3.0という文字列になると思いましたが、意味不明なメッセージが出てきました。これは、「文字列型と小数型を足すことはできません」というエラーメッセージです。
3.0は数値ではなく文字列として認識してもらえるように書けばうまくいきます。
引用符を使って'3.0'と書いてみましょう。
>>> 'Python' + '3.0'
'Python3.0'
今度は足すことができました。
家を建てる例で言うと、木と木は釘で繋がりますが、木とガラスはそのままでは釘で打ち付けられないのと同じイメージです。どちらも同じデータ型にすれば接続することができるということです。
今度はnumberという変数を用意して足してみましょう。
>>> number = 3.0
>>> 'Python' + number
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be str, not float
先程と同じエラーメッセージが出てきます。このようなときに便利なのが、strという関数です。
strは引数を文字列に変換する機能を持っています。引数には文字列に変換したいデータをセットします。
>>> str(number)
'3.0'
戻り値には引用符が付いていますので、データが文字列になったことが分かります。
このstr関数を使うと次のように書き換えることができます。
>>> 'Python' + str(number)
'Python3.0'
データを画面に出力する関数 print
print関数は複数の引数を受け取ることができます。複数の引数はカンマで区切って並べます。print関数は受け取った引数を順番に半角スペースでつないで画面に表示してくれます。
>>> print('Python', 'プログラミング', number, 4.0)
Python プログラミング 3.0 4.0
引数が順番に画面に表示されていると思います。また、文字列型と小数型の引数を並べましたが、print関数が適切に処理をしてくれるのでエラーにはなりません。引数には変数や日本語を使うこともできます。
また、print関数にはsepという名前をつけた特別な引数を渡すと引数をつなげる区切り文字を変更できます。
>>> print('Python', 3.0, sep='---')
Python---3.0
sepという名前が付いた引数を渡した後は、引数を追加で渡すことはできません。
print関数は戻り値がなく、データの内容を画面に表示するという特殊な機能を持った関数です。
整数の並びを作る range
これまで紹介した関数は、データを引数として受け取ってそれを処理する道具でしたが、データを新しく作り出す関数もあります。range関数もその1つです。
リストは、いくつかのデータをまとめる役割を持ったデータ型でした。例えば、0から4までの5つの整数の要素を持ったリストを作って、number_listという変数名を付けてみます。
>>> number_list = [0,1,2,3,4]
これを参考に、0から9までの10個の要素を持ったリスト、number_list_10を作ってみるのは簡単ですが、1つ1つの数字を打ち込むのは面倒です。これを簡単にやってくれるのがrange関数です。0から始まり、引数に与えた整数の1つ手前まで連続した整数を用意してくれます。
>>> number_list_10 = range(10)
>>> number_list_10
range(0,10)
これで0から9までの10個の要素を持ったリストが返ってくるとわかりやすいのですが、「range(0,10)」というrange型が返ってきました。これは組み込み関数rangeの引数に大きな整数が指定されたとき、そのまま巨大なリストを返してしまうと、Pythonの処理が遅くなる可能性があるためです。
組み込み関数listを使うとrange関数からリストを作ることができます。
>>> list(number_list_10)
[0,1,2,3,4,5,6,7,8,9]
range関数も引数を複数取ることができます。
長さは10でも1から始まるリストを作ってみましょう。
>>> list(range(1,11))
[1,2,3,4,5,6,7,8,9,10]
range関数の戻り値をそのままlist関数の引数にしています。
range(1,11)は、「1から始まって11の手前まで」という意味です。