Python - 関数の書き方

関数

Python では def 文を用いて関数を定義することができます。

def Hello():
    print("Hello")

Hello() # Hello
def 文を用いた関数

関数を呼び出す際に情報を渡すためには、引数 (パラメータ)と呼ばれるものを使います。以下の例では xy の2つの引数を受け取り、合計値を表示しています。

def add(x, y):
    print(x + y)

add(3, 5) # 8
def 文を用いた関数と2つの引数

関数に渡す引数の数が少ない場合や、多い場合は、TypeError 例外が発生します。

def add(x, y):
    print(x + y)

add(1, 2, 3) # add() takes 2 positional arguments but 3 were given
関数に渡す引数の数が誤っているため TypeError 例外が発生する

return 文

return 文は、関数の戻り値を指定します。return 文を省略すると、関数は None を返します。

def add(x, y):
    ans = x + y
    return ans

print(add(3, 5)) # 8
return

戻り値は、変数に格納することもできます。

def add(x, y):
    ans = x + y
    return ans

ans = add(3, 5)
関数の戻り値を変数に格納する

戻り値には、複数の値を指定することもできます。

def myFunc():
    return 1, 2, 3

num = myFunc()
print(num[0]) # 1
print(num[1]) # 2
print(num[2]) # 3
複数の値を戻り値に指定する

位置引数とキーワード引数

引数は、呼び出し側の引数を実引数、関数側の引数を仮引数と呼びます。

def 関数名(仮引数1, 仮引数2, ...):
    ...


関数名(実引数1, 実引数2, ...)
実引数と仮引数

引数を指定して関数を呼び出す場合、関数には呼び出し側で指定した順番に変数に代入されます。以下の例では a には 1b には 2 が順番に代入されています。つまり、自動的に仮引数1には実引数1が代入され、仮引数2には実引数2が代入されます。このような位置による引数を位置引数と呼びます。

def myFunc(a, b):
    print(a, b)

myFunc(1, 2) # 1 2
位置引数

位置引数に対して、キーワード引数は、実引数と仮引数の組み合わせを指定して値を渡します。以下の例では、仮引数に実引数を指定する形で値を渡しています。そのため、ab の順番を逆にしても同じ結果が得られます。

def myFunc(a, b):
    print(a, b)
    
myFunc(a=1, b=2) # 1 2
myFunc(b=2, a=1) # 1 2
キーワード引数

位置引数とキーワード引数を混在させることもできます。混在させる場合は、必ず最初に位置引数を指定して、その後にキーワード引数を指定してください。

def myFunc(a, b):
    print(a, b)
    
myFunc(1, b=2) # 1 2
位置引数とキーワード引数を混在させる(成功)

キーワード引数の後に位置引数を指定した場合、SyntaxError が発生します。

def myFunc(a, b):
    print(a, b)
    
myFunc(a=1, 2) # SyntaxError: positional argument follows keyword argument
位置引数とキーワード引数を混在させる(失敗)

引数にデフォルト値を設定する

引数にはデフォルト値を設定することができます。デフォルト値が設定された関数を呼び出す際、引数が省略された場合はデフォルト値が使用されます。引数が省略されなかった場合は、その値が使用されます。

def myFunc(a=10):
    print(a)
    
myFunc(5) # 5
myFunc()  # 10
引数にデフォルト値を設定する

引数のデフォルト値は、複数の引数に設定することもできます。

def myFunc(a=10,b=20):
    print(a, b)
    
myFunc(5, 7) # 5 7
myFunc(5)    # 5 20
myFunc()     # 10 20
複数の引数にデフォルト値を設定する

引数が複数あり、すべての引数にデフォルト値を設定しない場合、設定しなかった引数には実引数を指定する必要があります。もしも実引数を指定しなかった場合は TypeError 例外が発生します。

def myFunc(a,b=20):
    return
    
myFunc(5, 7) # 5 7
myFunc(5)    # 5 20
myFunc()     # TypeError
複数の引数にデフォルト値を設定する場合の注意点

また、複数の引数のデフォルト値をすべて設定しない場合、デフォルト値が設定されている引数は、設定されていない引数よりも後に定義されていなければなりません。そうでない場合は SyntaxError が発生します。

# OK
def myFunc1(a,b=20):
    return

# SyntaxError: non-default argument follows default argument
def myFunc2(a=10,b):
    return
複数の引数にデフォルト値を設定する場合の注意点
0
SHARE
Twitter
@murashun
お問い合わせ
murashun@gmail.com
ご質問(マシュマロ)
https://marshmallow-qa.com/murashun
ご支援(Stripe)
https://checkout.stripe.com/