何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『Effective Python』Item 21: キーワード専用引数で関数をわかりやすくしよう

『Effective Python』の続き。Chapter2.の最後を飾るのはキーワード専用引数。 www.effectivepython.com

割り算で、オーバーフローとかゼロ除算を無視して扱いたい、という場合、以下の様な気のきいたオプション付きの函数が書ける。

def safe_division(number, divisor, ignore_overflow,
                  ignore_zero_division):
    try:
        return number / divisor
    except OverflowError:
        if ignore_overflow:
            return 0
        else:
            raise
    except ZeroDivisionError:
        if ignore_zero_division:
            return float('inf')
        else:
            raise

このとき、

result = safe_division(1, 10**500, True, False)
print(result)
result = safe_division(1, 0, False, True)
print(result)

と書いて果たしてどちらがオーバーフロー無視なのかゼロ除算無視なのかが一目でわかるだろうか、という問題提起から始まり、キーワード専用引数を使えば函数の利用意図も明確になってバグが減るよね、という話。 函数の呼び出し時に負担が増えるが、バグを減らすためなら、というわけである。 おまけ(?)として、想定してないキーワードが渡された場合はTypeErrorが送出される。 なお、Python 3の場合は専用の構文があり一発であるが、Python 2の場合は手動で行う必要がある。

これでChapter2まで訳出し終えた。合法的に公開したいと数回言ってきたが、どうすればよいか。 勉強会…。