Pythonで関数を作成する

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()の引数にラムダ式を直接記述しています。
 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年12月
1234567
891011121314
15161718192021
22232425262728
293031