こんにちは。IT/経済ジャーナリストで投資家の渡辺です。
これまでは簡単なプログラムばかりなので、こんなふうにコードを単純に順番に書いてきました。
1. 手順その1
2. 手順その2
3. 手順その3
…..
1つずつ、頭から処理するよう、命令を書いていっています。
ところが、プログラムが大きくなってくると、パンツ、靴下、下のシャツ、上着、ハンカチ、、、と幼稚園児にお着替えさせるような、いちいち指示を出す方法は面倒ですし、無駄が多いですし、間違い(バグ)が起きやすくなります。
なので、パンツ、靴下、下のシャツ、上着、ハンカチ、、、の部分は「お着替えして!」の一言で済ませるようにすることをオススメします。
具体的には、ある機能(=まとまった処理)については、後ろにまとめてコードを記述します。
このような機能を「関数」といいます。
英語のfunctionの翻訳なので、ある「機能」という意味もありそうです。
具体的にはこんな感じでしょうか。
<これまでの書き方>
1. パンツを履け
2. 靴下を履け
3. アンダーシャツを着て
4. 上着を着て
5. 上着のポケットにハンカチを入れて
<関数を使った書き方>
1. お着替えして #これで関数「お着替え」が作動する
(関数:お着替え)
(1) パンツを履け
(2) 靴下を履け
(3) アンダーシャツを着て
(4) 上着を着て
(5) 上着のポケットにハンカチを入れて
(関数:お着替え:終わり)
これだけ書くと、何だか同じ手間のように見えます。
ところが、上記の(関数:お着替え)の部分を別ファイルにして再利用できるようにすると、以降のプログラム開発が最初の1行「お着替えして」で済んでしまうのです。
前回、Pythonには便利で高機能なライブラリ(アプリ開発にすぐ使える、いろいろな部品の入ったパッケージ)が豊富にあって、アプリが開発しやすいという話をしましたが、実はこういう部品を自分でも作れてしまうのです。
関数を定義し、後から呼び出す
それでは実際に関数を作ってみます。
関数を作るときは、定義definitionの意味で、以下のようにします。
def 関数名 (引数1, 引数2):
(処理の中身を書く)
return 数値
プログラムから使いたい関数をdefで定義した名前(関数名)で呼び出します。
その時に処理してもらいたい数値や文字があれば、カッコ内に指定します。これを「引数(ひきすう)」といいます。
円の面積を計算する関数
例として、円の半径を入力すると、面積を求めるプログラムを考えてみます。
まず、半径の数値を入れる変数 r を用意して、そこにinput()関数でキーボードから数値を入力します。
# coding: utf-8
r = input(“円の半径:”)
area = 3.14159 * (float(r) ** 2)
キーボードから入力した数字は一見数値に見えても、コンピュータの中では「文字」として保管されてしまいます。
ということで、その次に計算するので、下の行では float() 関数を使って、文字でなく小数へ「型変換」をしています。
print文の中は , で区切って並べて書くと、順番に画面に出力されます。
print(“半径”,r, “の円の面積は”, area)
これを関数を活かして、書き換えてみます。
円の面積を出す関数を circle_area として定義しています。
# coding: utf-8
まず、半径の数値を指定すると、そこから円の面積を計算して計算結果を返す関数を定義します。
def circle_area(rad):
result = 3.14159 * rad ** 2
return result
次にプログラムの本文を書いていきます。
ユーザーにキーボードから数値を入力させ、半径を受け取るところは同じです。
次に関数 circle_area()を呼び出し、計算したい半径の値をカッコ内に指定しています。
r = input(“円の半径:”)
area = circle_area(float(r))
print(“半径”,r, “の円の面積は”, area)
実際に計算させてみました。
短いプログラムなら、やらせたい処理を先頭から順番に書いていってもいいのですが、少し大きなアプリを作るときには、重要な機能やよく使う機能は関数としてまとめてしまうのが効率的です。
<今日の要約ノート>
プログラムを書くときに、重要な機能やよく使う機能は、「関数」としてまとめてしまうとプログラムが見やすくなったり、後から再利用できて便利。関数はdef (関数名)でプログラマーが定義できる。引数(ひきすう)という形で、処理させたい数値を関数名に続くカッコ内で指定し、結果を「戻り値」として受け取る。戻り値は関数の中にreturn文で書いておく。
コメント