【レッスン3-1】Python関数の基本を実践で身につけよう
Lesson2ではPythonの制御構造について学習してきました。
今回から関数とスコープ編に入ります。このページはその入り口、関数の基本について見ていきます。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編
・Lesson3-1:関数の基本を理解しよう ◁今回はココ
・Lesson3-2:関数の戻り値とデフォルト引数を理解しよう
・Lesson3-3:スコープの概念を理解しよう
・Lesson3-4:関数を使いこなそう
・Lesson3-5:無名関数を理解しよう
・Lesson3-6:可変長引数を理解しよう
・Lesson3-7:デコレーターを理解しよう
・練習問題3-1:丁半賭博ゲームを作ろう
・練習問題3-2:石取りゲームを作ろう
Lesson4:データ構造編
Lesson5:オブジェクト指向編
次のステップ:Pythonを用いたアプリ開発
関数を定義して呼び出す|Pythonの関数の基本
ここから関数の説明に入ります。
ページ下部にはこのページで出てくる用語の意味をまとめた 用語集 もありますので、分からない言葉が出てきたらそちらも参考にしてください。
プログラミングにおいて 関数 は非常に重要な役割を果たしますが、Pythonにおいても関数を使ってコードを整理し、再利用性を高めることができます。
本記事ではPythonにおける関数の定義方法と使用方法について解説します。
関数とは?|単独で動作するコードのブロック
関数とは一連の処理をまとめて一つの名前で呼び出すことができる仕組みです。
一つのコードの中で何度も使用する処理を関数として定義しておけば、関数を呼び出すだけでその処理を何度でも実行することができます。
これによりコードの見通しが良くなり、保守もしやすくなります。
関数の定義方法 と 関数を構成する要素
Pythonで関数を定義するには、def
キーワードを使います。基本的な構文は以下の通りです。
def 関数名(引数): # 新しい関数の定義 処理内容 # この関数の処理内容 return 戻り値 # この関数の処理結果をどうするか決める
def
: 関数を定義するためのキーワードです。- 関数名: 関数の名前です。任意の名前を付けることができますが、分かりやすい名前を付けるのが望ましいです。
- 引数: 関数に渡す値です。引数が不要な場合は空の括弧
()
にします。 return
: 関数が処理結果を返すためのキーワードです。詳細は次の記事で解説します。
以下は、引数として名前を受け取り、その名前に対して挨拶を行う関数の例です。
def greet(name): # 引数nameを受け取る関数greetを定義 print(f"Hello, {name}!") # この関数の処理内容
この関数を実行すると、受け取ったnameを使用して「Hello, name!」と出力されます。
関数の呼び出し方|1つ or 複数の引数を使用する例
先ほど定義した関数greetは、以下のように呼び出すことができます。
greet("Alice") # 事前に定義された関数greetに、引数Aliceを渡して実行
このように関数を呼び出すことで、name
に”Alice”を渡し、greet
関数がHello, Alice!
と出力します。
すなわち事前に関数greetを定義しておくことで、たった1行のコードでそれを使用できるということです。
次にもう少し複雑な例として、引数に2つの数値を取り、それらを足し合わせる関数を定義してみましょう。
def add_numbers(a, b): # 2つの引数aとbを受け取る関数add_numbersを定義 print(a + b) # この関数の処理内容
この関数は2つの引数a
とb
を受け取り、その合計値を出力します。
add_numbers(3, 5) # 関数add_numbersに、2つの引数を渡して実行
関数add_numbers
に3と5を渡して呼び出すと、合計の8が出力されます。
このように、関数を使うことで繰り返し使う処理を簡単にまとめることができます。
- コラム:引数には「実引数」と「仮引数」の2種類がある
-
実引数と仮引数|2種類の引数の違いを理解しよう
関数を理解するうえで重要なのが、実引数(じつひきすう)と 仮引数(かひきすう)の違いです。
まず、仮引数とは関数を定義するときに使われる変数のことです。
関数が呼び出されたときに渡される値(実引数)を受け取るための名前として使われます。
def greet(name): # この name は仮引数 print(f"Hello, {name}!")
一方、実引数は関数を呼び出すときに渡す具体的な値のことです。
greet("Alice") # この "Alice" は実引数
仮引数は「受け取る側」、実引数は「渡す側」と覚えておくとわかりやすいでしょう。
代表的な組み込み関数の例と使い方を紹介
Pythonには多くの便利な 組み込み関数 が最初から用意されています。
これらの関数は自分で定義する必要がなくすぐに利用することができます。
以下は、代表的な組み込み関数の例です。
1.print()
: コンソールに文字列や変数の値を表示する関数。
print("Hello, World!") # 出力: Hello, World!
2.input()
: ユーザーからの入力を受け取る関数。
name = input("あなたの名前を入力してください: ") print(f"こんにちは、{name}さん!")
3.len()
: リストや文字列の長さを返す関数。
my_list = [1, 2, 3, 4] print(len(my_list)) # 出力: 4
4.sum()
: リストやタプルなどの数値の合計を計算する関数。
numbers = [1, 2, 3, 4] print(sum(numbers)) # 出力: 10
5.range()
: 一定範囲の整数のリストを生成する関数。
for i in range(5): print(i) # 出力: 0 1 2 3 4
これらの組み込み関数は非常に便利で、プログラミングの効率を大幅に向上させます。
特にprint()
やlen()
などは頻繁に使用されるため、初心者でもすぐに習得できるでしょう。
まとめ
この図は、このレッスン3「関数編」で学習する内容をまとめた図です。今回は一番上のシンプルな関数の定義と呼び出しについて学びました。
関数はPythonのプログラミングにおいて、コードを効率的に書くための強力なツールです。
一度定義すれば何度でも再利用できるため、特に大規模なプログラムを書く際に非常に役立ちます。
またPythonには多くの組み込み関数が用意されており、これらを活用することでさらに生産性を高めることができます。
関数の定義と組み込み関数を組み合わせて、より効率的なプログラミングを目指しましょう。
練習問題:預金の金利を計算して最終的な金額を表示するプログラムを作ろう
銀行にお金を預けた際、年利を考慮して預けた元金が数年後にどれだけ増えるかを計算するプログラムを作成しましょう。
元金、年利、預ける年数を入力して、関数を使ってその計算結果を画面に表示します。
問題の詳細条件
以下の要件に従ってコードを完成させてください。
- 関数
calculate_and_print_interest
を定義し、元金、年利、預ける年数を引数として受け取ること。 - 関数内で、以下の複利計算式を使って最終的な金額を計算し、乗示すること。
- 計算式: 最終金額 = 元金 × (1 + 年利 / 100) の (預けた年数)乗
- ユーザーから元金、年利(%)、預ける年数を
input
関数を使って入力させること。 - ユーザーが入力した値を使って、関数を呼び出し、最終的な金額を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
元金を入力してください: 100000 年利(%)を入力してください: 5 預ける年数を入力してください: 10 10年後の預金額は: 162889.46円です。
【ヒント】難しいと感じる人だけ見よう
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
1.関数
calculate_and_print_interest
の定義
1-1. 元金、年利、年数の引数を受け取る
1-2. 複利計算の式を使用し、最終金額を計算
1-3. 計算結果を日本語で表示する2.メイン部分
2-1.input
関数を使ってユーザーから元金を入力してもらう
2-2.input
関数を使ってユーザーから年利(%)を入力してもらう
2-3.input
関数を使ってユーザーから預ける年数を入力してもらう
2-4. 関数calculate_and_print_interest
を呼び出す
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 関数の定義 # この関数は元金、年利、年数を引数に取り、最終的な金額を計算して表示する関数です。 def calculate_and_print_interest(principal, rate, years): """【穴埋め問題1】 ここに複利計算式を使って最終金額を計算するコードを書いてください。 """ """【穴埋め問題2】 ここに計算結果を日本語で表示するコードを書いてください。 """ # メイン部分 # ユーザーから元金、年利、年数を入力してもらう principal = float(input("元金を入力してください: ")) rate = float(input("年利(%)を入力してください: ")) years = int(input("預ける年数を入力してください: ")) """【穴埋め問題3】 ここで関数 calculate_and_print_interest を呼び出し、入力された値を使って計算を行うコードを書いてください。 """
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
問題の答え合わせと解説
この問題の一つの正解例とそのコードの解説を以下に示します。
一つの正解例
例えば以下のようなプログラムが考えられます。
- 正解コード
-
# 関数の定義 # この関数は元金、年利、年数を引数に取り、最終的な金額を計算して表示する関数です。 def calculate_and_print_interest(principal, rate, years): # シンプルな複利計算の式を使用 # 最終金額 = 元金 * (1 + 年利) ** 年数 final_amount = principal * (1 + rate / 100) ** years # 計算結果を直接表示 print(f"{years}年後の預金額は: {final_amount:.2f}円です。") # メイン部分 # ユーザーから元金、年利、年数を入力してもらう principal = float(input("元金を入力してください: ")) rate = float(input("年利(%)を入力してください: ")) years = int(input("預ける年数を入力してください: ")) # 関数を呼び出して最終的な金額を計算し、表示する calculate_and_print_interest(principal, rate, years)
正解例の詳細解説
このPythonコードでは銀行に預金を預けた際に数年後の金額を計算するための関数を定義し、それを使って金利計算を行っています。
ブロックごとに詳しく解説していきます。
- 詳細解説
-
関数の定義
def calculate_and_print_interest(principal, rate, years):
- この部分は関数を定義しています。必要な引数(
principal
、rate
、years
)を受け取り、その処理を実行します。 principal
,rate
,years
はそれぞれ、元金、年利、預ける年数を表します。
複利計算を行う部分
final_amount = principal * (1 + rate / 100) ** years
- この行は、複利計算を行っています。
principal
(元金)に対して、年利(rate
)を考慮し、数年後の最終的な金額を計算しています。
計算結果を表示する部分
print(f"{years}年後の預金額は: {final_amount:.2f}円です。")
print
関数を使って、計算結果を画面に表示します。f"{years}年後の預金額は: {final_amount:.2f}円です。"
という形式で、years
年後の預金額(final_amount
)を日本語で表示しています。:.2f
は小数点以下2桁まで表示することを意味します。
メイン部分:ユーザーからの入力を受け取る
principal = float(input("元金を入力してください: ")) rate = float(input("年利(%)を入力してください: ")) years = int(input("預ける年数を入力してください: "))
input
関数を使って、ユーザーから元金、年利、年数を入力してもらいます。float
関数は、入力された値を実数(小数を含む数値)に変換します。元金と年利は小数点以下も扱えるようにするためにfloat
を使用します。int
関数は、入力された値を整数に変換します。預ける年数は整数として扱います。
関数の呼び出し
calculate_and_print_interest(principal, rate, years)
この関数が実行されると、金利計算が行われ、最終的な預金額が表示されます。
ここで、先ほど定義した関数
calculate_and_print_interest
を実際に呼び出し、ユーザーが入力した元金、年利、年数を引数として渡します。 - この部分は関数を定義しています。必要な引数(
Python用語集|関数編
今回の記事で出てきた用語・関数などを一覧で紹介します。
このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。
Python用語 | 定義・使い方の概要 | 解説記事へのリンク |
---|---|---|
関数 | ひとまとまりの処理に名前を付けて再利用可能にしたもの。def で定義される | 本記事 |
引数 | 関数に渡す入力値のこと。関数内の処理に使用される | 本記事 |
実引数 | 関数を呼び出し時に渡す具体的な値 | 本記事 |
仮引数 | 関数定義時に受け取る値の名前で、関数内で実引数の値を扱うために使う | 本記事 |
戻り値(返り値) | 関数の処理結果として呼び出し元に返される値 | Lesson3-2 |
return | 関数の処理を終了し、戻り値を返すためのキーワード | Lesson3-2 |
組み込み関数 | Pythonに標準で用意されている関数。print() や len() などが含まれる | 本記事 |
sum() | 数値の入ったイテラブル(リストなど)の合計値を計算して返す関数 | 本記事 |
print() | 引数に指定した値を画面に出力するための組み込み関数 | Lesson1-1 |
input() | ユーザーからの入力を受け取り、その結果を文字列として返す組み込み関数 | Lesson1-1 |
len() | 文字列、リストなどの要素数(長さ)を返す組み込み関数 | Lesson1-4 |
range() | 連続した整数の列を生成する関数。主に for 文の繰り返し処理と一緒に使用される | Lesson2-5 |
FAQ|Pythonの関数定義と基本操作
- Q1. Pythonで関数を定義するメリットは何ですか?
-
関数を定義することで、コードを繰り返し使い回せるため、保守性や可読性が向上します。また、処理を分割することで、プログラムの構造が明確になり、エラーの特定も容易になります。
- Q2. input()で受け取った値を関数に渡すにはどうすればいいですか?
-
input()
で取得した値を変数に格納し、それを引数として関数に渡せば処理が可能です。例えば、user_input = input()
とし、my_function(user_input)
のように使います。
- Q3. 関数名はどう決めればいいですか?
-
関数名はその関数が何をするかが一目で分かるよう、動詞+目的語の形式(例:
calculate_total
など)が望ましく、Pythonの命名規則(スネークケース)に従うのが一般的です。