コードのまとまりに名前を付ける
関数は、何度でも実行できる名前付きのコードのまとまりです。def、名前、かっこ、コロンで一度だけ定義し、その下のインデントされたブロックが本体になります。return は関数を呼び出した側へ値を返します。呼び出すとは、名前に続けてかっこと処理したい値を書くことです。
def gross_value(price, quantity):
return price * quantity
print(gross_value(184.25, 200)) # 36850.0パラメータと引数
def のかっこの中の名前がパラメータで、入力のための置き場所です。呼び出すときに渡す値が引数で、順番にパラメータへ入ります。順番を入れ替えると結果が変わります。引数の数が違うとエラーになります。呼び出しごとに、パラメータは新しく用意されます。
# Arguments fill the parameters in order
def spread(bid, ask):
return ask - bid
print(spread(184.25, 184.5)) # 0.25
print(spread(184.5, 184.25)) # -0.25returnはprintではない
print は人のために画面に表示します。return は呼び出し元のコードに値を渡し、その値を使い続けられるようにします。return のない関数は「何もない」を意味する None を返します。計算する関数は返すものです。表示するかどうかは呼び出し側が決めます。
# A function with no return gives back None
def show(price):
print("price", price)
result = show(184.25) # price 184.25
print(result) # None小さな関数を積み重ねる
関数は別の関数を呼び出せるので、小さくテストしやすい部品から大きな動作を組み立てられます。1つの関数には1つの仕事と、それを表す名前を付けましょう。def の直下に書く文字列のdocstringは、次に読む人への説明になります。関数は、それを呼ぶ行が実行される前に定義しておきます。
# Small functions build bigger ones
def gross_value(price, quantity):
"""Value of a position before costs."""
return price * quantity
def commission(gross):
"""0.1% of the value, but never less than 1.0."""
return max(1.0, gross * 0.001)
def net_cost(price, quantity):
"""What the position really costs: value plus commission."""
gross = gross_value(price, quantity)
return gross + commission(gross)
print(net_cost(184.25, 200)) # 36886.85複数の値を返す
return a, b は2つの値をタプル(カンマで書く順序付きのペア)として一度に返します。タプルはまもなく独立したトピックで扱います。呼び出し側はすぐに各要素へ名前を付けられます。1,000株の注文を // と % で3分割すると、1回分の数量と余りが返ってきます。
# return several values as a tuple
def split_fill(quantity, slices):
return quantity // slices, quantity % slices
size, leftover = split_fill(1000, 3)
print(size, leftover) # 333 1returnで関数は終わるPythonは最初に到達した
return で関数を抜け、その経路で後ろにある行は実行されません。パラメータと関数内で作った変数は、呼び出しの間だけ存在し、外のコードからは見えません(詳しくはスコープのトピックで)。- 1つの関数に1つの仕事。名前は何を返すかを表す
- 計算して
returnし、表示は呼び出し側に任せる - 入力と出力を説明するdocstringを付ける
次は関数の引数とデフォルト値です。名前付き引数、省略可能な値、任意の数の引数で関数を呼び出します。
ラボ:採点される内容
gross_valueでポジションを評価する関数を定義する25点commissionで下限付きの手数料を計算する25点net_costで2つの関数から実際のコストを組み立てる25点split_fillで2つの値を一度に返す25点