0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonでのアンパックの実践例(pillow)

Posted at

はじめに

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")

出力結果

sample.png

ポイント

違う関数でも名前や型が同じ引数をとるのであれば、同じ辞書型の変数を使い回せる。

共通の引数を様々な関数で使いまわしたい場合、引数をクラス化してラップ関数をるといった手が思い浮かぶが、
こんな感じにシンプルに実装できることも覚えておこう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?