はじめに
Pythonはアンパックによって辞書型を関数にねじ込むことができる。
具体的な文法自体は上記のとおりだが、これだけでは有り難みがわかりにくかった。
仕事してたら実践例が頭の中に降ってきたので、忘れないうちに残しておく。
実践例
画像に対して複数の図形を書きたいとき、C#ではPenを使って同じ幅、色の図形を連続して描くことができた。
ではPython(pillow)で同じように設定を使いまわしたいときは?
→アンパックをC#のPenの代わりにできることに気がついた
サンプルコード
from PIL import Image, ImageDraw
DEFAULT_BRUSH = {"outline": (0, 255, 0), "width": 5}
def create_canvas():
return Image.new("RGB", (500, 500), (0, 0, 0))
def paint_brush(target: Image):
draw = ImageDraw.Draw(target)
draw.ellipse([(100, 100), (200, 200)], fill=(255, 255, 255), **DEFAULT_BRUSH)
draw.rectangle([(200, 100), (300, 200)], **DEFAULT_BRUSH)
return target
if __name__ == '__main__':
paint_brush(create_canvas()).save("sample.png")
出力結果
ポイント
違う関数でも名前や型が同じ引数をとるのであれば、同じ辞書型の変数を使い回せる。
共通の引数を様々な関数で使いまわしたい場合、引数をクラス化してラップ関数をるといった手が思い浮かぶが、
こんな感じにシンプルに実装できることも覚えておこう。