Pythonで関数を定義する!戻り値や引数についても解説
関数の概念はどのプログラミング言語でも登場します。
しかし定義の方法は言語によって異なり、PythonならPythonの記述方法を知っておかなければなりません。よりステップアップした学習をしてくためにもこの知識は欠かせません。
そこで、ここでは関数の定義方法や呼び出し方、引数などに関することを解説していきます。
Pythonで関数を扱う必要性
関数とは、ある処理をまとめたもののことです。Python以外のプログラミング言語においても登場する概念であり、プログラムを作成する上ではどの言語であっても欠かすことのできない知識です。Pythonでも頻繁に用いられ、使用頻度も高いです。
また、関数を使う上では引数についても理解しておく必要があるでしょう。引数がない関数の場合には、関数内で決められた処理をそのまま実行することになり、基本的には一定の結果が得られます。
一方で、引数のある関数では定義した関数を使用する際に、任意の値を関数に与えることでその値に対応した結果が得られるようになります。
例えば常に「Hello」という文字を表示させる処理であれば引数のない関数でかまいませんが、引数で与えた値を使って足し算をしたい場合には引数のある関数となるでしょう。
関数を使えば何度も同じプログラムを記述する必要がなくなり、効率的に作業が進められるようになります。さらに作業スピードを上げるだけでなく視認性の向上や管理をしやすくすることにも効果があります。
あとからプログラムを見直したときに何をしているのか分かりやすく、不具合が見つかったときでも、何か所も書き換えるという必要がなくなり、大元となる関数を手直しするだけでよくなるのです。
関数の定義
関数の定義は関数を活用する上で前提となる作業です。多くの言語で行われていることですが、その定義方法はそれぞれ異なっています。
Pythonの場合には「def文」を使って関数(function)定義をしていきます。defに続けて任意の関数名を指定し、それ以後に具体的な処理の内容を記述していきます。
実際に関数を定義してみましょう。定義すること自体は下の例のようにとてもシンプルです。
def hello():
print ('Hello')
hello()
# Hello
ここで定義したのは「Hello」と表示するだけの単純な関数です。関数名は「hello」とし、ユーザー側の指定する引数もないため関数の後ろに記述する括弧の中は空のままとなっています。そして行の終わりにはコロン(:)を付けるのを忘れないようにしましょう。
関数の呼び出しには、例のようにその関数名を記述します。引数の指定が求められる場合には引数を与えますが、ここでは引数のない関数を定義していますのでそのまま定義時と同じように括弧の中は空でかまいません。
キーワード付き引数で初期値を指定
上のプログラム例で引数を使うようにすると任意の名前を付け足すこともできるようになります。
def hello(name):
print ('Hello '+ name)
hello('Sato')
# Hello Sato
さらに、引数にはあらかじめ値を指定することもできます。
def hello(name='Sato'):
print ('Hello '+ name)
hello()
# Hello Sato
どちらも出力結果は同じく「Hello Sato」です。しかし、仮にSatoさんに対する挨拶しかする必要がなければ、初めから例のように指定しておくと関数の呼び出し時に引数について記述する必要はなくなります。また、関数を使用していく上では戻り値を指定することも多いです。
戻り値を使用した例としては以下のようなものが挙げられます。
def add(a, b):
x = a + b
return x
answer = add(70, 30)
print (answer)
# 100
ここでは「return」で戻り値を指定しています。つまり、この場合だと関数を呼び出した時にreturnで指定したxの値があてられており、出力結果は関数内で足し算された「100」という数値になります。
引数の応用
引数は初期値を設定できるだけでなく、可変長引数を使うことでより柔軟に関数を使用することができるようになります。
可変長引数の利用
可変長引数を利用する場合には引数の手前にアスタリスク「*」を付けます。可変長引数を使うのは引数の数が不定である場合です。
def sample(name1, name2, *args):
print (name1)
print (name2)
print (args)
sample('Sato', 'Tanaka', 'Suzuki', 'Honda')
#Sato
#Tanaka
#('Suzuki', 'Honda')
この場合、関数呼び出し時に引数を4つ指定しています。可変長引数を使用しない場合だと引数を4つ受け取るように関数定義をしなければなりません。しかし、どれだけ引数が与えられるか分からない場合にはこのように可変長引数を使って定義しておくと良いでしょう。ただし可変長引数自体を複数定義することはできません。
キーワード付き引数を辞書型で受け取る
キーワード付きの引数を受け取るように関数を定義することもできます。この場合は、アスタリスクを2つ並べて以下のように記述します。
def sample(name1, **params):sd
print (name1)
print (params)
sample('Sato', 年齢=30, 性別='男')
#Sato
#{'年齢': 30, '性別': '男'}
辞書型とは、波括弧{}の中にキーワードと値が組み合わされているデータのことで、関数の定義時に指定しておくことでキーワード付き引数を辞書型で受け取ることもできるようになります。ちなみに、可変長引数を複数定義することはできませんでしたが、アスタリスク1つの可変長引数とアスタリスク2つのキーワード付き可変長引数であれば混在させることができます。
「*args1
」「*args2
」のように可変長引数が複数あったところで引数に与えた値をどちらに含ませるのか、区切りの判定ができないためこの場合には混在が許されていません。しかし、キーワード付きであればその区別ができるため混在が許されているのです。
まとめ
ここではPythonで関数を定義する方法や引数の使い方といった基本的な内容を紹介してきました。最初は「def文」から始まり、引数には初期値が設定できるほか可変長引数などを使うことで関数呼び出し時に不定数の引数を与えることもできるようになります。
Pythonのマスターに向けてこうした基本的な内容を少しずつ身につけていくと良いでしょう。