見出し画像

30日Python #7 ひとまとまりの作業に、名前をつける(関数)

「読むデータ」は、臨床医・医学研究者のための、Pythonと機械学習の連載。プログラミングの技術を身につけることから始め、自分のデータを「読み解く」力を鍛える。今回の#7では、よく使う処理をまとめて呼び出せる「関数」を学ぶ。基礎編も、いよいよ最終盤だ。所要時間は5分。読むのに3分、手を動かすのに2分。


同じ手順を、毎回書き直すのか

BMIを計算する場面を思い浮かべてほしい。体重を身長の二乗で割る。一人目で計算し、二人目でまた同じ式を書き、三人目でも……と、同じ手順を毎回くり返し書いていたら、式を打ち間違える危険も増えるし、何より面倒だ。

臨床では、こういう決まった手順に名前をつけて共有している。「BMIを出して」と言えば、計算者は中の計算をいちいち確認しなくても結果を出せる。手順そのものに「共通の名前」がついているから、中身を毎回説明せずに呼び出せる。

プログラミングにも、同じしくみがある。一連の処理に名前をつけ、必要なときにその名前で呼び出す。それが関数だ。


要点

  • 関数は、一連の処理に名前をつけて、何度でも呼び出せるようにするしくみ。「def 名前(): 」で作成する。

  • カッコの中に「材料(引数)」を渡し、return で「結果」を返す。材料を変えれば、同じ関数が何にでも使える。

  • 一度作れば、中の手順を気にせず名前だけで呼べる。print( ) も append( ) も、こうして用意された関数である。


1. 処理に、名前をつける

新しいセルに、BMIを計算する関数を作ってみよう。

def bmi(weight, height):
    return weight / (height ** 2)

実行しても何も表示されない。これは「bmi という名前の関数を、こう定義した」という宣言をしたのみだからだ。中身はまだ動いていない。

コードを読み解くと、def bmi(weight, height): が「weight と height という二つの材料を受け取る、bmi という関数を作る」という意味。** は「べき乗」で、height ** 2 は身長の2乗を表す。return は「この結果を返す」という指示だ。

2. 名前で、呼び出す

作った関数は、名前に材料を渡して呼び出す。身長1.7m、体重65kgで計算してみよう。

bmi(65, 1.7)

これを実行すると

22.49...

と表示される。weight に65、height に1.7が入り、中の式が計算されて返ってきた。材料を変えれば、別の人のBMIも一行で出せる。

bmi(80, 1.75)
26.1... 

と出る。式を書き直す必要はない。一度作った bmi を、共通の名前で呼ぶだけだ。

3. すでに、関数を使っていた

実は、これまで使ってきた print( ) も append( )(第4回)も、同じ仕組みの関数だった。誰かがあらかじめ中の処理を行うこの関数を用意してくれていて、私たちは共通の名前で呼び出すだけで使えていた。

print("BMI:", bmi(65, 1.7))
BMI: 22.49...

と表示される。bmi( ) の結果を、print( ) に渡している。

関数の結果を、別の関数に渡す。これから機械学習を扱うとき、「データを渡すと予測を返す関数」を呼び出すことになる。その呼び出し方は、今日の bmi(65, 1.7) と、何も変わらない。


今日の実習(2分)

新しいセルで、次をやってみよう。

  1. 二つの数を受け取って合計を返す関数を作る。def add(a, b): の次の行に、字下げして return a + b と書く。

  2. add(3, 5) を呼び出し、8 が返ることを確かめる。

  3. 余裕があれば、平均を返す関数 def mean2(a, b): return (a + b) / 2 を作り、mean2(140, 160) が 150 を返すことを確かめる。

def の次の行は字下げしなければならない。for や if と同じ決まりだ。


今日のまとめ

関数は、一連の処理に名前をつけ、材料を渡して結果を受け取るしくみ。

一度作れば、中身を気にせず名前で呼べる。私たちが機械学習で使うことになる道具も、その正体は「データを渡すと結果を返す関数」だ。今日でその呼び出し方の型を、もう手にしている。


基礎編も、残すところあと一つ。値を箱に入れ(変数)、並べ(リスト)、くり返し(for)、条件で分け(if)、手順に名前をつける(関数)。プログラミングの背骨になる五つの道具が揃った。次回は、これらに加えて最後の一つ「辞書」を学び、そのまま「データそのもの」へと踏み出していく。

次回、第8回「ひとりの患者を、まるごと記録する」

項目名と値を組にして記録する「辞書」を学ぶ。基礎の総仕上げであり、データ編への橋になる。

いいなと思ったら応援しよう!