どうも~むるむるです~
今回の記事では「関数の定義,関数の呼び出し,ラムダ式」について学んでいきたいと思います.
このシリーズではプログラミング初心者が最低限のPythonの知識を最短で身に着けることを目標としています.
このシリーズでは以下の順番でPythonの基本的な知識を学習していきます.
- Python:Anacondaインストールとhello world,簡単な計算,コメントアウト
- 変数について
- データ型:int, float, str, bool
- データ型:list, tuple, dict
- 条件分岐:if – else 文
- 繰り返し:for文,while文
- 関数の定義,呼び出し,ラムダ式 (この記事)
- クラス
- モジュールのインポート
- 例外処理:try, except, else, finally
- map, reduce, filter
関数
関数はよく,何かを入れると何かを返してくれる箱のようなものと説明されることが多いです.その説明はその通りで,関数とはある入力に対して何か決まったルールに従って,出力を返してくれるものです.
関数への入力を引数,関数の出力を戻り値と呼びます.
プログラミングではよく使う処理を関数として定義することで毎回同じ処理を書くことなく,一度,定義した関数を呼び出すだけで処理を行うことができます.
関数の定義
関数は以下のように定義することができます.
処理
return 戻り値
いつも通り例から見てしまいましょう.
# 関数 def f(x): y = 2*x return y print(f(2)) print(f(3.7)) ''' 出力結果: 4 7.4 '''
上では「f」という名前の関数を定義しました.関数は「x」という値を受け取り「y = 2*x」という処理を行って「y」を返してくれます.やっていることは入力に対して2倍した値を返してくれるということです.
関数を呼びだすときは「関数名(引数)」としてあげればよいです.上の例でもあるように「f(2)」とすると2を2倍した4を返し,同様に「f(3.7)」とすると7.4を返してくれます.
関数というと中学の数学で習った数値と数値の関係というイメージを持つ方もいるかもしれませんが,プログラミングで出てくる関数は 引数(入力)や戻り値(出力)を数値に限る必要はなく文字列や,真偽値,リストなど様々な種類のデータを入力,出力させることができます.
例えば以下の例では関数「call_name」に文字列「x」を渡すと「Hi, x」と出力します.
def call_name(name): print('Hi, ' + name) call_name('むるむる') ''' 出力結果: Hi, むるむる '''
今まで,一つの引数に一つの戻り値の場合のみを説明してきましたが,引数と戻り値はともに一つである必要はありません.「return」のあとに,複数の戻り値を「,」で区切って並べれば複数の値を戻り値として設定できます.
以下の例では,「x」,「y」を渡すと,その和と差を返してくれます.
# 複数の戻り値 def f2(x, y): z1 = x + y z2 = x - y return z1, z2 print(f2(1, 2)) print(f2(0.8, -2.5)) ''' 出力結果: (3, -1) (-1.7, 3.3) '''
デフォルト引数
関数を定義する際に,引数が省略されたときにデフォルトの値を設定することができます.下の例を見てみましょう.
# デフォルト引数 def kakezan(x, y = 2): return x * y print(kakezan(3)) print(kakezan(3, 5)) ''' 出力結果: 6 15 '''
今までとの違いは関数を定義するときに引数の部分で「x」は今まで通りですが二つ目に「y = 2」と「y」に値を設定していることがわかると思います.
一つ目の「print」では二つあるはずの引数が1つしか設定されていないのにしっかりと出力を返してくれています.このとき,デフォルト引数を使うことによって「y」を省略したときは「y = 2」がデフォルトで設定されるようになっています.
デフォルトと別の値を渡したいときはいつも通り,引数を渡してあげれば二つ目の「print」のようにしっかりと値を返してくれます.
デフォルト引数を設定するときの注意は,デフォルト引数を通常の引数よりも前に書いてしまうとエラーが出ます.
以下はデフォルト引数を先に書いてしまっているダメな例です.
# デフォルト引数:ダメな例 def kakezan(x = 3, y): return x * y
組み込み関数
さて,上では自分で関数をどう定義して,どう呼び出すかを説明しましたが,Pythonにはよく使われる関数があらかじめいくつか備わっています.そのような関数のことを「組み込み関数」と呼びます.
例えば,今までたくさん使ってきた「print」関数や「range」関数は自分たちで定義せずとも関数として使ってきました.そのような関数はいくつかありますが,必要なときに調べて,よく使うものだけ自然に覚えておけばいいと思います.
どんな組み込み関数があるのか気になる方はこちらに目を通してみると良いでしょう.
ラムダ式(無名関数)
今までは関数に名前を付けて定義してきましたが,ラムダ式という名前を付けずに関数を定義するものもあります.
ラムダ式は以下のように書きます.
今までやってきた関数の定義の仕方とラムダ式を使った場合とを比べてみましょう.
# 今まで通りの関数の定義 def squared(x): return x**2 # lambda式 lambda x: x**2 print(squared(5)) print((lambda x: x**2)(5)) ''' 出力結果: 25 25 '''
上の例ではラムダ式を使うと,関数にわざわざ名前を付けなくても関数に名前をつけて定義した時と同じようなことができました.そのことからラムダ式を無名関数と呼ぶこともあります.
このラムダ式は以降に出てくるmap関数などを使うときによく使います. 今はこんなの何に使うんだよ...と思っている方はmap関数の説明までお待ちいただき,こんなのあるんだなぁくらいに今は思っておいてください.
確認クイズ
クイズ1
引数に数値を入れたとき「5」を足した値を返してくる関数を定義してください.
クイズ2
以下のコードで出力される値を考えてみてください.考えたら実際にコードを書いてみて当たっているか確認してみましょう.
def f(x, y, z= 5): return x + y + z print(f(1, 2, 3))
次回
次回は「クラス:class」について学習します.
次の記事はこちら.
機械学習のためにしっかりとPythonを勉強したいなら,ある程度の基礎を身に着けた後に下の本を読むのがお勧めです.この本をこなせば,より高いレベルへ到達できるでしょう.
必ずしも必要ではありませんが,独学がどうしても苦手で,いつもどこかで詰まってしまったり,勉強が続かない方はプログラミングスクールへ登録して,わからないことがあったらすぐに人に質問をできる環境で勉強するという手もあります.
Tech Academyは時間がない方でもオンラインで完結する受講携帯で質問もできます.
手っ取り早く短期間で集中してPythonを勉強したい方はプログラミングスクールも考えてみてはいかがでしょうか.
