NaaN日記

やったこと、覚えたことを発信する場

関数を作る(Python)

今回は関数を作ることについて。理解していないことの多さを痛感。

関数の定義
def 関数名():
    処理
return
def name(na):
    return na

def hello():
    print(name('ねこ') + "さん、こんにちは!!")

#ねこさん、こんにちは!!

printで'+'をつけることを忘れそうになる

複数return

','で区切ることで複数の要素をreturnできる
○タプル
下のようにreturnすると、型はタプル

def test():
    return 'zero', 0

print(type(test()))
<class 'tuple'>

○リスト
'[]'で囲むことで型がリストになる

def test():
    return ['zero', 0]

print(type(test()))
#<class 'list'>
デフォルト引数
def 関数名(引数=デフォルト値,引数=デフォルト値):
    関数のブロック
#引数を指定せず関数を実行すると、デフォルト引数が入る
def name(na = '名無し'):
    return na

print(name() + "さん!")
#名無しさん!

print(name('ねこ') + "さん!")
#ねこさん!
デフォルト引数の注意点

デフォルト値は最初に一度だけしか評価されないので、
リストや辞書といった変更可能なオブジェクトを使う際、注意が必要

def list_beta(lst = []):
    lst.append('Hello')
    print(lst)
list_beta()
list_beta()
list_beta()
list_beta(['Good','Morning'])

#['Hello']
#['Hello', 'Hello']
#['Hello', 'Hello', 'Hello']
#['Good', 'Morning', 'Hello']

デフォルト引数は不変のものを設定する方が良い

def list_beta(lst = None):
    if lst is None:
        lst = []
    lst.append('Hello')
    print(lst)
    
list_beta()
list_beta()
list_beta(['Good','Morning'])

#['Hello']
#['Hello']
#['Good', 'Morning', 'Hello']