『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まで訳出し終えた。合法的に公開したいと数回言ってきたが、どうすればよいか。 勉強会…。