Pythonで関数を作成する方法をいくつか試してみます。
サンプルコード
関数の定義は「def 関数名(引数)」 の形で指定します。
# 関数の定義 def greet(name): print('こんにちは、' + name) # 関数の呼び出し greet('はるか') # こんにちは、はるか greet(name = 'かなた') # こんにちは、かなた
関数実行時の引数は、値のみでも引数名=値の形で指定することもできます。
引数には初期値を設定することもできます。
# 関数の定義 def greet(name, serif = 'こんにちは'): print(serif + '、' + name) # 関数の呼び出し greet('はるか') # こんにちは、はるか greet('かなた', 'こんばんは') # こんばんは、かなた greet('クレア', serif = 'おはよう') # おはよう、クレア
可変長引数を受け取る場合は引数名の頭に*を付けます。
# 関数の定義 def greet(*names, serif = 'こんにちは'): for name in names: print(serif + '、' + name) # 関数の呼び出し greet('はるか', 'かなた', 'クレア', 'エミリ', serif = 'おはよう')
実行結果
おはよう、はるか おはよう、かなた おはよう、クレア おはよう、エミリ
defを使用せず、ラムダ式で無名関数を定義することもできます。
前述の2番目のサンプルを少し修正して、関数内で出力するのではなくreturnで返すようにしてみます。
# 関数の定義 def greet(name, serif = 'こんにちは'): return serif + '、' + name # 関数の呼び出し print(greet('はるか', serif = 'こんばんは')) # こんばんは、はるか
これをラムダ式で書き換えると、以下のようになります。
# ラムダ式 greet = lambda name, serif = 'こんにちは': serif + '、' + name print(greet('はるか', serif = 'こんばんは')) # こんばんは、はるか
「def 関数名(引数): 処理」が「lambda 引数: 処理」という形になります。
上記のサンプルだとあまりメリットがありませんが、例えば以下のような場合などには便利です。
def sort_height(member): return member['height'] members = [{ 'name': 'はるか', 'height': 172 }, { 'name': 'かなた', 'height': 151 }, { 'name': 'クレア', 'height': 171 }, { 'name': 'エミリ', 'height': 168 }] members.sort(key=sort_height) print(members)
sort()で使用する関数sort_heightを定義して、sort()の引数に指定しています。
これをラムダ式を使って書き換えると、以下のようにできます。
members = [{ 'name': 'はるか', 'height': 172 }, { 'name': 'かなた', 'height': 151 }, { 'name': 'クレア', 'height': 171 }, { 'name': 'エミリ', 'height': 168 }] members.sort(key=lambda member: member['height']) print(members) # [{'name': 'かなた', 'height': 151}, {'name': 'エミリ', 'height': 168}, {'name': 'クレア', 'height': 171}, {'name': 'はるか', 'height': 172}]
sort()の引数にラムダ式を直接記述しています。
【参考サイト】
コメントが承認されるまで時間がかかります。