Python3 | ⑤関数の定義
こんにちは、現役理系大学生のShogoです!
今回は、Python3超入門講座第5弾です!
前回の記事を読んでいない方は、こちらからご覧ください。
今回の内容は、「関数の定義」です。
Pythonで関数はなくてはならない存在です。自分で関数を作ることはもちろん、以前やった組み込み関数のようにもともと定義づけされているものもあります。
今回は、そんな関数の基礎中の基礎を学習していきます!
それでは、いきましょう!
5-1 関数
まとまりのある処理をする場合、それらを関数として定義することができます。
例えば、次のような形で記述されます。
def say_hello():
print('Hello World!')
say_hello() # Hello World!
print('Hello World!')という処理が、say_hello()という関数として定義され、のちに同じようにsay_hello()と記述してあげることで、出力されます。
また、returnというものを使ってあげると次のようにも記述できます。
def say_hello():
h = 'Hello World!'
return h
result = say_hello()
print(result) # Hello World!
この流れは次のようなイメージです。
'Hello World!'がhに入る
→hをsay_hello()自体に返す
→say_hello()がresultに入る
→resultが出力
つまり、returnは関数名そのものに値を入れていることになります。
✅引数を取れる
関数は引数を取ることができます。例えば、次のようなものです。
def your_favorite(fruit):
print(fruit)
your_favorite('apple') # apple
your_favorite('banana') # banana
your_favorite('grape') # grape
この流れは次のようなイメージです。
your_favorite(fruit)のfruitに'apple'が入る
→print('apple')となり出力
( )のなかにいれるものが引数(ひきすう)です。引数の中身を変えることで、bananaやgrapeなど様々なものを出力できます。
5-2 関数内関数
関数内関数とは、名の通り関数の中に関数を持つものです。
例えば、次のようなものです。
def outer(a, b):
def inner(c, d):
return c + d
result = inner(a, b)
print(result)
outer(1, 4)
少し難しそうに思えますが、至ってシンプルです。
(1, 4)なので(a, b)に代入
→inner(a, b)より関数inner(c, d)に値が代入
→つまり、1, 4→a, b→c, d
→c + dが行われてinner()に返される
→resultに値が代入
→print(result)で出力
このように関数内関数は、そのおおもとの関数(outer)でしか使わない関数(inner)を定義するときによく用いられます。
5-3 ラムダ
関数はdef文のように関数名をつけて定義しますが、lambdaを用いることで無名関数を作成することが可能です。
例として、まずlambdaを使わないものを見ていきましょう。
u = ['apple', 'banana', 'orange', 'grape']
def upper_words(words, func):
for word in words:
print(func(word))
def upper_func(word):
return word.upper()
upper_words(u, upper_func)
# APPLE
# BANANA
# ORANGE
# GRAPE
これは、['apple', 'banana', 'orange', 'grape']の要素をひとつずつ大文字にしていくというプログラムです。
lambdaを使うことで、upper_func(word)の部分を簡略化できます。
u = ['apple', 'banana', 'orange', 'grape']
def upper_words(words, func):
for word in words:
print(func(word))
upper_func = lambda word: word.upper()
upper_words(u, upper_func)
# APPLE
# BANANA
# ORANGE
# GRAPE
このように2行あったものが1行にまとめられていることがわかります。このコードは次のように動いています。
upper_words(u, upper_func)の要素を、upper_words(words, func)にそれぞれ代入
→forループで'apple'をwordに代入
→func(word)、つまり、upper_func(word)となる
→lambda wordにより、lambda 'apple'となり、upperで大文字化(APPLE)
→forループの中のprintで出力
→これを繰り返す
まとめ
今回は、「関数の定義」を学習しました。
関数は、効率化を図ろうと思えば、どんなシーンでもつかうものなので、ここでしっかり覚えておきましょう!
質問や訂正があれば、遠慮なくこの記事にコメント、もしくは、TwitterにDMをしてください!(@shogo_python)
今回の記事が"いいね!"と思ってくれた方は、スキとフォローをよろしくおねがいします!
では、またの機会にお会いしましょう!
Python3 超入門講座 一覧はこちらから