1日目のゴール
1日目のテーマは
「def で関数を定義して、自分で呼び出せるようになること」です。
今日できるようになってほしいのは、この2つだけです。
def を使って「自分の命令」を作る
その命令(関数)を「名前で呼び出す」
これができると、
「同じ処理を何度も書かなくていい世界」に入れます。
関数とは何かを“日本語で”理解する
関数は「名前のついた処理のまとまり」
まず、コードの前にイメージからいきます。
あなたが毎朝やることを考えてみてください。
起きる
顔を洗う
歯を磨く
コーヒーを入れる
これを毎回全部言葉で説明するのは面倒なので、
「朝のルーティン」と名前をつけると楽になります。
プログラミングでいう「関数」は、
この「朝のルーティン」と同じです。
何行かの処理に、
名前をつけてひとまとめにしたもの
それが関数です。
def で関数を定義する基本形
いちばんシンプルな関数の形
まずは、形を見てください。
def say_hello():
print("こんにちは!")
Pythonこれで、say_hello という名前の関数ができました。
ここで重要なのは3つです。
def で「これから関数を定義しますよ」と宣言しているsay_hello が関数の名前: の次の行から、インデント(字下げ)された部分が「関数の中身」
この関数は、
「呼ばれたら『こんにちは!』と表示する」
という処理のまとまりです。
関数は「定義しただけ」では動かない
よくある勘違いがこれです。
def say_hello():
print("こんにちは!")
Pythonこれを書いても、
何も表示されません。
理由はシンプルで、
「定義」と「実行」は別だから」です。
定義は「こういう処理ですよ、と登録するだけ」。
実際に動かすには「呼び出し」が必要です。
関数呼び出しの基本
関数を「名前+かっこ」で呼ぶ
さっきの say_hello を呼び出してみます。
def say_hello():
print("こんにちは!")
print("これからあいさつします")
say_hello()
print("あいさつが終わりました")
Python実行すると、こうなります。
これからあいさつします
こんにちは!
あいさつが終わりました
ここで押さえてほしいポイントは、
say_hello ではなくsay_hello() と「かっこ」をつけて呼ぶ
ということです。
かっこがついた瞬間に、
「この関数を実行して」という意味になります。
同じ処理を何度も書かないための関数
関数がないとどうなるか
例えば、3回あいさつしたいとします。
関数を使わないと、こうなります。
print("こんにちは!")
print("こんにちは!")
print("こんにちは!")
Pythonこれでも動きますが、
「こんにちは!」の内容を変えたくなったら
全部書き換えないといけません。
関数を使うとどうなるか
def say_hello():
print("こんにちは!")
say_hello()
say_hello()
say_hello()
Python「何をするか」は関数の中に1回だけ書いておいて、
「いつやるか」は呼び出し側で決める。
これが関数の一番おいしいところです。
もしあいさつを変えたくなったら、
関数の中身だけ変えればOKです。
def say_hello():
print("おはようございます!") # ここだけ変える
Python呼び出し側はそのままで、
動きだけ変えられます。
引数なしの関数で「処理をまとめる」感覚をつかむ
例:区切り線を表示する関数
アプリを作っていると、
画面に区切り線を出したくなることがあります。
print("==========")
Pythonこれを何度も書くのはダルいので、
関数にしてしまいます。
def print_line():
print("==========")
Python使うときはこうです。
print("メニューを表示します")
print_line()
print("1: 追加")
print("2: 削除")
print_line()
print("終了します")
Pythonここでのポイントは、
「区切り線を出す」という意味のかたまりにprint_line という名前をつけた
ということです。
コードを読む人は、print_line() を見ただけで
「ここで区切り線が出るんだな」と分かります。
1日目のミニアプリ:あいさつ+区切り線アプリ
今日の学びをまとめた小さな例
def print_line():
print("==========")
def say_hello():
print("こんにちは!Python 初級編へようこそ。")
print_line()
say_hello()
print_line()
print("今日は『def と関数呼び出し』を学びます。")
print_line()
Pythonこのコードの中で、
def print_line():
→ 区切り線を出す処理に名前をつけている
def say_hello():
→ あいさつの処理に名前をつけている
print_line() / say_hello()
→ 「その処理をここで実行して」という命令
という役割分担になっています。
つまずきポイントを先に潰しておく
つまずき1:インデント(字下げ)を忘れる
関数の中身は、必ずインデントします。
def say_hello():
print("こんにちは!") # ← これはエラー
Python正しくはこうです。
def say_hello():
print("こんにちは!")
Python「def の行より、1段下げる」と覚えてください。
つまずき2:呼び出しでかっこを忘れる
say_hello # これは「関数そのもの」を指しているだけ
say_hello() # これは「関数を実行する」
Python最初は、
「呼び出すときは必ずかっこをつける」
と機械的に覚えてしまってOKです。
1日目のまとめ:今日つかんでほしい感覚
今日の本質は、
「関数は“名前のついた処理のまとまり”」
という感覚を持つことです。
def 関数名(): で「処理に名前をつける」
インデントされた部分が「その処理の中身」関数名() で「その処理を実行する」
同じ処理を何度も書かずに済む
ここまでイメージできていれば、
2日目以降の「引数」「戻り値」も
スッと頭に入ってくるようになります。

