2015-03-15
キーワード引数の強制
Pythonの関数定義において、キーワード引数形式でのみ実引数を渡せる(keyword-only arguments)よう強制する方法。
# Python 3.x def f(a, b, *, x=None, y=None): print("a={} b={} x={} y={}".format(a, b, x, y)) f(1, 2) # OK: a=1 b=2 x=None y=None f(1, 2, x=3) # OK: a=1 b=2 x=3 y=None f(1, 2, y=4) # OK: a=1 b=2 x=None y=4 f(1, 2, 3, 4) # NG # TypeError: f() takes 2 positional arguments but 4 were given
この記法はPython 3で導入されたため、Python 2では * 部分でSyntaxErrorとなる。キーワード引数の辞書(**kwargs)を受けるか、特殊なマーカーオブジェクトを利用してエミュレーションする。
# kwargsを利用 def f(a, b, **kwargs): x = kwargs.pop('x', None) y = kwargs.pop('y', None) print("a={} b={} x={} y={}".format(a, b, x, y)) # 特殊マーカーオブジェクト利用 _end_of_args = object() def f(a, b, marker=_end_of_args, x=None, y=None): if marker != _end_of_args: raise TypeError print("a={} b={} x={} y={}".format(a, b, x, y))
関連URL:
トラックバック - http://d.hatena.ne.jp/yohhoy/20150315/p1
リンク元
- 252 https://www.google.co.jp/
- 66 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB0QFjAA&url=http://d.hatena.ne.jp/yohhoy/20120115/p1&ei=YBsFVYK_BMv18QWtsYAI&usg=AFQjCNGmdmqSASQ8cK_ZdiT1kQbxoo469g&bvm=bv.88198703,d.dGc
- 33 http://www.google.co.jp/url?url=http://d.hatena.ne.jp/yohhoy/20121101/p1&rct=j&frm=1&q=&esrc=s&sa=U&ei=xjgGVe-FEILdmAWamIHQCQ&ved=0CDkQFjAG&usg=AFQjCNFa7T9T3rhIwmQ1TJIYjiHr-bDXOg
- 28 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCIQFjAB&url=http://d.hatena.ne.jp/yohhoy/20120623/p1&ei=_wUFVcKrEo3l8AWsloGwDw&usg=AFQjCNF4WYqGzwptL3t6CDPxZsHJyA5Wsw&sig2=G-h2ggUhDaIajn3UXv38YA&bvm=bv.88198703,d.dGc
- 25 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CCgQFjAC&url=http://d.hatena.ne.jp/yohhoy/20130413/p1&ei=LoEFVZbTAeHAmwXd5ILACA&usg=AFQjCNHWIpgToRWwWcYvm9jk0EQZx9BGxw&sig2=mUNaf99gtle-yjILvlv5iA&bvm=bv.88198703,d.dGc
- 24 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=3&ved=0CCoQFjAC&url=http://d.hatena.ne.jp/yohhoy/20120302/p1&ei=rj4GVe_sFcHHmAWmmoDIAQ&usg=AFQjCNHMGDx_jBy4Ghh7Gec_54p5ZWPcJQ&bvm=bv.88198703,d.dGY
- 24 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CC0QFjAD&url=http://d.hatena.ne.jp/yohhoy/20130413/p1&ei=MkUFVZiJOoeK8QWProCwAg&usg=AFQjCNHWIpgToRWwWcYvm9jk0EQZx9BGxw
- 22 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&uact=8&ved=0CEQQFjAE&url=http://d.hatena.ne.jp/yohhoy/20120215/p1&ei=ZFUGVZ6GMqO5mAXqr4HIDg&usg=AFQjCNGOb2gqbUNI_gOVPHNgZ5_eXhaCYg&bvm=bv.88198703,d.dGc
- 15 https://www.google.com/
- 11 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&ved=0CEkQFjAF&url=http://d.hatena.ne.jp/yohhoy/20120803/p1&ei=3k0GVcPLDoqk8QWJnIKIAg&usg=AFQjCNFocpac7m2g2O7gElpGUvfs8eOKBQ&bvm=bv.88198703,d.dGc&cad=rja