python デコレータの基本 @

python3の デコレータ でハマった.
@なんちゃら の意味が分からん.
コードを書きながら理解する.

概要は次の通り.

動作環境

  • Python 3.6.5

今回のゴール

今回のゴールは次の通り.

  • デコレータ について知る
  • 次のコード @hoge の役割がわかる
  • ちょっと動かしてみる

結論

  • デコレータはPythonで使われる syntactic sugar だ.

事前知識

デコレータを理解するには事前知識が必要.

  • syntactic sugar
  • デコレータ
  • *args の使い方
  • 関数の特徴

簡単に解説.

syntactic sugar

syntactic sugar の意味をググった.

糖衣構文(とういこうぶん、英: syntactic sugar)は、プログラミング言語において、読み書きのしやすさのために導入される書き方であり、複雑でわかりにくい書き方と全く同じ意味になるものを、よりシンプルでわかりやすい書き方で書くことができるもののことである。構文上の書換えとして定義できるものであるとも言える

引用: 糖衣構文 | wikipedia

つまりこういうこと.

  • 動作は一緒だけど
  • 本来の書き方よりももっと簡単な表現

デコレータ

デコレータを簡単にまとめるとこんな感じ.

  • @ を使った記法
  • 既存関数を直接変更することなく, 機能追加or変更が可能
  • 基本構文
    • @デコレータ名

pythonには組込のデコレータがあって,
有名なのはこのへん↓

  • @classmethod

今回は使わないけど覚えておく.

*args の使い方

関数 (dev) の基本.

*args は引数をいくつとるか分からないときに便利.

たとえばこんな感じ↓

実行

関数の特徴

python の関数には次の特徴がある.

  • 引数に 関数 を渡せる
  • 返り値として 関数 を返せる

デコレータを理解するには↑これを意識するのが大切.

事前知識はこれでok.

コードを書いて理解する

実際にコードを書きながら理解する.

まず, 次の2つの動作は一緒.

↑これが ↓こう 書ける

↑これが syntactic sugar.
@ を使った方が簡単でしょ?
ということらしい.

コードが短いと @ の有り難みがわからん.

これの仕組みを理解するには,
さっきの関数の特徴を思い出すと良い.
つまりこういうこと↓

じゃあごにょごにょしてみるか.

ここでのゴールは次の通り.

  • hoge()
  • ごにょごにょを定義して
  • その結果を関数としてreturn

いざ、実践.

実行結果

*args は引数を利用した処理をしたいときに効果を発揮する.
今回は利用しなかった.

このコードの何が凄いのか.
それはここ↓

def で定義した箇所は一切触ってないのに,
@hoge を付けただけで動作が変わった!!!!

きっとこれがデコレータの威力.

pythonにおけるデコレータの基本はこんな感じ.

今回は以上.

スポンサーリンク
336 x 280 – レクタングル(大)
336 x 280 – レクタングル(大)
  • このエントリーをはてなブックマークに追加

この記事が気に入ったら
いいね!しよう

スポンサーリンク
336 x 280 – レクタングル(大)
トップへ戻る