見出し画像

デコレータ引数渡しの練習【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の正体を調べたら
より分かりやすい👇

result=
のとこ!注目★

deco関数の
ローカルにあるiiki って書いてある…
!!(,,ºᗜ​º,,*)*ᕷ˖°


最終的には
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冊


気になる本があれば
試し読みだけでも♪
(´▽`)

この記事が気に入ったらサポートをしてみませんか?