11章ではPythonにおける『関数』について解説します。
本記事では、「関数とは何か?」「関数の使い方」、「組み込み関数とユーザー定義関数」を扱っています。
本連載講座【Python 基礎編】では、「プログラミング未経験の方」が挫折せずにPythonの基礎を学ぶことができます。
プログラミングを始めて学ぶ方が理解できるよう、丁寧に解説しています。
さらに、学んだ内容を身につけるための演習問題も用意しています。
・Pythonを挫折せずに学習したい
・無料でPythonを確実に習得したい
このような考えを持っている方は、Tech Teacherが運営する【Python 基礎編】を用いて、Pythonの学習をすることをお勧めします!
<目次>
1章:Pythonの特徴・概要
2章:環境構築と基本操作
3章:出力関数print()
4章:数値の型(int、float)と算術演算子
5章:文字列の操作(len・抽出・結合)
6章:真偽値(True・False)・論理演算(AND、OR、NOT)・比較演算子
7章:変数
8章:if文による条件分岐
9章:リストと辞書
10章:for・whileによる繰り返し(ループ)処理
11章:関数の作り方・使い方
12章:クラスとモジュール
関数とは
プログラムにおける『関数』とは、一連の処理を再利用できるようにまとめたものです。
数学における関数とは少し意味合いが違うので注意しましょう。
関数を用いることで、何度も同じような処理を記述する必要がなくなったり、プログラムが読みやすくなるなどのメリットがあります。
また、バグが生じたときに直す箇所が減り、プログラムの保守もしやすくなります。
関数の使い方
関数の定義と呼び出し方
Pythonにおいて、関数は以下のように定義します。
def 関数名(引数1, 引数2, ...):
処理1
処理2
...
return 戻り値
if文やfor文と同様、関数の中身は4文字か2文字分インデント(字下げ)する必要があることに注意しましょう。
また、関数の処理の内容が分かるような関数名を付けることを心がけましょう。
定義した関数は以下のように書くことで呼び出すことができます。
関数名(引数1, 引数2, ...)
また、引数や戻り値は必要がなければ省略することができます。(引数や戻り値については後程解説します。)
まずは、引数や戻り値がない簡単な関数を定義して呼び出してみましょう。
以下は'Hello, world!'
と出力する処理を行う関数を定義し、呼び出すプログラムです。
# 関数の定義
def say_hello():
print('Hello, world!')
# 関数の呼び出し
say_hello()
Hello, world!
関数名()
と書くことで関数が呼び出され、関数内の処理が一度だけ実行されていることが分かります。
引数と戻り値
関数には複数の『引数』と1つの『戻り値』を設定することができます。
『戻り値』は、『返り値』と呼ばれることもあります。
『引数』は関数を呼び出す際に与える値のことで、関数は与えられた引数に従って処理を実行します。
『戻り値』は関数を実行した時に返される値のことです。
数学が得意な人は、数学で学習する関数「z = f(x,y)」をイメージすると『引数』と『返り値』が理解しやすいでしょう。
これは、関数fに引数「x、y」を渡すと、戻り値「z」が返ってくるということを意味しています。
引数や戻り値に型の制限はありませんが、想定と異なる型が引数や戻り値として与えられた場合、バグが生じる可能性があるので注意しましょう。
以下の関数calc_product
は、与えられた3つの数値の積を戻り値として返します。
def calc_product(a, b, c):
p = a * b * c
return p
# 関数を呼び出し、戻り値をxに代入
x = calc_product(2, 3, 4)
print(x)
# 引数に変数を代入することもできる
num1 = 3
num2 = 5
num3 = 7
y = calc_product(num1, num2, num3)
print(y)
24
105
組み込み関数とユーザー定義関数
Pythonの関数は『組み込み関数』と『ユーザー定義関数』に大別されます。
ここまで考えてきた関数はすべてユーザーが自分で定義する『ユーザー定義関数』です。
それに対して『組み込み関数』とは、Pythonであらかじめ用意されている関数のことで、print関数やint関数などが該当します。
今まで登場した「print()」や「range()」、「type()」などが、この組み込み関数に該当します。
Pythonには多くの便利な組み込み関数が存在し、使用することで余計なコードを書かずに目的の処理を実現することができます。積極的に活用しましょう。
組み込み関数と同じ名前の関数を定義しないようにしましょう。
ローカル変数とグローバル変数
ローカル変数とグローバル変数とは
Pythonの変数は『ローカル変数』と『グローバル変数』に大別されます。
『ローカル変数』は関数の内部で参照される変数のことです。
複数の関数に同じ名前の変数があっても、それらはそれぞれの関数内で別々の変数として扱われます。
また、関数内で定義されたローカル変数を関数の外部で参照することはできません。
def func():
val_local = 100
print(val_local)
func()
# xはローカル変数なので、関数の外からは参照できない
print(val_local)
100
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 8
5 func()
7 # xはローカル変数なので、関数の外からは参照できない
----> 8 print(val_local)
NameError: name 'val_local' is not defined
上の例では、関数func
内で定義された変数val_local
を関数の外部で参照しようとしているため、エラーメッセージが出てしまっています。
一方『グローバル変数』は関数の外部で参照される変数のことです。
一つのプログラムに同じ名前のグローバル変数を複数定義することはできません。(後から定義した変数が前の変数を上書きしてしまいます。)
val_global = 100
def func2():
val_global = 20
print(val_global)
# 関数'func2'内でval_globalが参照され、20が代入される
func2()
# もちろんval_globalを関数の外から参照することができる
print(val_global)
20
100
ローカル変数とグローバル変数が参照できる範囲を以下の図に示しておきます。
global文
また『global文』を用いることで、関数内で変数を定義する際にローカル変数でなくグローバル変数として定義することができます。
def func3():
global x
x = 100
print(x)
# 関数'func3'内で変数xをグローバル変数として定義する
func3()
# 関数'func3'内で定義した変数xを、関数の外から参照できる
print(x)
100
100
変数を定義・参照する場合は、その変数がローカル変数とグローバル変数のどちらであるかを意識するようにしましょう。
『Tech Teacher』3つの魅力
魅力1. オーダーメイドのカリキュラム
『Tech Teacher』では、決められたカリキュラムがなくオーダーメイドでカリキュラムを組んでいます。「質問だけしたい」「相談相手が欲しい」等のご要望も実現できます。
魅力2. 担当教師によるマンツーマン指導
Tech Teacherでは、完全マンツーマン指導で目標達成までサポートします。
東京大学を始めとする難関大学の理系学生・院生・博士の教師がが1対1で、丁寧に指導しています。
そのため、理解できない箇所は何度も分かるまで説明を受けることができます。
魅力3. 3,960円/30分で必要な分だけ受講
Tech Teacherでは、授業を受けた分だけ後払いの「従量課金制」を採用しているので、必要な分だけ授業を受講することができます。また、初期費用は入会金22,000円のみです。一般的なプログラミングスクールとは異なり、多額な初期費用がかからないため、気軽に学習を始めることができます。
まとめ
・魅力1. 担当教師によるマンツーマン指導
・魅力2. オーダーメイドのカリキュラム
・魅力3. 3,960円/30分で必要な分だけ受講
質問のみのお問い合わせも受け付けております。
練習問題
以下の練習問題を解いてみましょう。
練習問題
問1. 以下の条件を満たす関数を作成し、実際に何度か呼び出して動作を確認してください。
(1) 文字列Hello, world!
を5回連続で出力(横並びでなくてもよい)する関数
(2) 要素数が1以上の任意のリストを引数として受け取り、リストの長さを返す関数(ただし、組み込み関数のlen()
は用いないでください。)
※ (2)で関数名をlen()
としないようにしましょう。
問2. 以下の条件を満たす関数を作成し、実際に何度か呼び出して動作を確認してください。
(1) 任意の自然数を引数として受け取り、1からその自然数までの和を返す関数
(2) 整数を受け取り、その数が偶数か奇数かを判定し、結果を文字列(‘偶数’または’奇数’)で返す関数
解答
あくまで解答例なので、全く同じである必要はありません。
(1)
def say_hello_five_times():
for i in range(5):
print('Hello, world!')
# 実行例
say_hello_five_times()
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
(2)
def calc_list_length(li):
idx = li.index(li[-1]) # リスト最後尾の要素のインデックスを取得
return idx + 1
# 実行例
nums = [1, 2, 3, 4, 57]
length = calc_list_length(nums)
print(length)
5
(1)
def calc_cumsum(x):
s = 0
for i in range(1, x+1):
s += i
return s
# 実行例
print(calc_cumsum(4))
print(calc_cumsum(100))
print(calc_cumsum(3776))
10
5050
7130976
(2)
def even_or_odd(number):
if number % 2 == 0:
return '偶数'
else:
return '奇数'
# 実行例
result1 = even_or_odd(4)
result2 = even_or_odd(7)
print(result1)
print(result2)
偶数
奇数
次の記事へ