デコレータ引数渡しの練習【Python🐍】
こんにちは!
パソコンインストラクター歴12年目の
チサです。(*´∀`)
先日…
Python🐍のデコレータの練習
をしたのですが。👇
今日は
デコレータの引数渡し
というのをやったので♪
書きますね!
前回作ったコードはコチラ👇
def deco(func):
def ikki():
print("手を洗いました👐")
func()
print("みんなでおいしく食べました")
return ikki
@deco
def curry():
print("カレーを作りました🍛")
curry()
curry関数の上に
@のデコレータをつけて…
curry関数の前後に
処理を追加しました。
『カレーを作りました🍛』
と出力する前に
前に『手を洗いました』
後ろに『みんなでおいしく食べました』
を出力♪
(詳しくは前回のnote参照)
で…
今回はさらにレベルアップして♪
引数を渡して…
こんな風に出力させたい!
手を洗いました👐
カレーを作りました🍛
みんなでアイス🍦もおいしく食べました
『アイス🍦』の部分を引数にして
渡したいと思います。
で…どうやるのかというと…
def deco(func):
def ikki(desert):
print("手を洗いました👐")
func(desert)
print(f"みんなで{desert}もおいしく食べました")
return ikki
@deco
def curry(desert):
print("カレーを作りました🍛")
curry("アイス🍦")
❶ curry関数を実行する命令文に
引数を指定
curry("アイス🍦")
❷ curry関数に
受取用の引数(desert)を指定
def curry(desert):
print("カレーを作りました🍛")
❸デコ用⁉️のdeco関数が定義している
ikki関数にも❷の引数(desert)を指定
さらに…
本体のcurry関数に渡すために
func()にも❷の引数(desert)を指定
def deco(func):
def ikki(desert):
print("手を洗いました👐")
func(desert)
print(f"みんなで{desert}もおいしく食べました")
return ikki
これで終わり!
こうすることで
『アイス🍦』を引数として渡せます!
【出力結果】
手を洗いました👐
カレーを作りました🍛
みんなでアイス🍦もおいしく食べました
…
……
一気にばばーーーっと
説明しましたが。。。
なんでこんな風に書くのか?
わかりますか⁉️
|ω・)チラッ
わたしは…正直
引数の指定場所を
どこにすればいいのか⁉️
さっぱりわかんなかったです💦( ´∀` )
でもね…
@のデコレータの役割??
を理解できたら
意味がわかりました♪
def deco(func):
def ikki(desert):
print("手を洗いました👐")
func(desert)
print(f"みんなで{desert}もおいしく食べました")
return ikki
@deco
def curry(desert):
print("カレーを作りました🍛")
curry("アイス🍦")
デコレーターって
いろいろめっちゃ端折って
シンプルにいうと…
curry(”アイス🍦”)の実行
は
ikki関数を実行
と同じことなんです‼️
(・∀・)ウン!!
def ikki(desert):
print("手を洗いました👐")
func(desert)
print(f"みんなで{desert}もおいしく食べました")
return ikki
コードを実行して
curryの正体を調べたら
より分かりやすい👇
最終的には
iiki関数が実行される…
ってことなので♪
受け取り用の引数は
ikki関数に指定するってことっぽい!
敵❓の正体を調べてみると
具体的に何してるのか
わかってくるので🎵
わかんないことが出てきたら
ID・型・値
そして今回のように
__str__とかを使って
(👆特殊メソッドっていうそうです)
中身を覗く👀習慣
つけようと思います
【追記】
引数がたくさんあっても
対応できるようにするには…
受け取り側で
*args, **kwargs って書くと
引数がたくさんあっても対応してくれるみたい♪
def deco(func):
def ikki(*args, **kwargs):
print("手を洗いました👐")
func(*args, **kwargs)
for desert in args:
print(f"みんなで{desert}もおいしく食べました")
return ikki
@deco
def curry(*args, **kwargs):
print("カレーを作りました🍛")
curry("アイス🍦","プリン🍮","チョコ🍫")
print("終了!")
引数のアンパック♪
ここで登場するのか…
参考note👇
ではでは
またあした!
(´꒳`)/
2022年12月吉日🎉
11冊目の新刊📕
【プロが教える】
かんたん・かわいい 図形で作るイラスト講座
出版しました!
ヾ(o´∀`o)ノワァーィ♪
イラストを描くのが苦手な方も
図形を使えば
かわいいイラスト作れちゃいますよ♪
(紙の📕もご用意してます)
【Amazonで販売中のKindle📕】
➊パソコンに関する📕 3冊
➋Kindle出版に関する📕 2冊
➌節約に関する📕 1冊
➍読書に関する📕 1冊
➎海外の方向けの📕 3冊
気になる本があれば
試し読みだけでも♪
(´▽`)