デコレータと聞いて、「あ〜なんか飾りづけするやつね!!」と思ったあなた。
デコレーションじゃないです。デコレータです。
でも実際には、関数の中身を書き換えずに関数を修飾するための仕組みですのことを言っているので、
いい線いってますよ(^_^)
デコレータとは、すでにある関数に内容を追加して別の関数を定義するための機能です。
使うメリットとしては元の関数に手を加えずに機能追加ができます!!
デコレータの基本的な使い方
まず前提知識の話になってしまうのですが。。。
先ほど関数、関数と同じことばっかり言ってしまったので、もうすでに分かる方に分かる内容なのですが
Pythonの関数の知識が不可欠になってきます!!
特に関数オブジェクトの基本だけは必要だな〜と思います。
さて本題に入らせてもたいます!!
デコレータはシンタックスシュガー (糖衣構文)と呼ばれるものになります。
シンタックスシュガーとはプログラミング言語において、ある書き方に対して別の書き方ができるようにしたものです。
2つのプログラムを実行するプログラム
例えば2つの関数を実行したいプログラムがあるとします。
それを関数の定義の基本を使って実行すると、以下のようなプログラムになります。
上のプログラムは上段は、言葉どおりに2回関数を実行するもので
下段は1回の実行で2つの関数を動かすプログラムになります。
下段のプログラムはなかなかスマートに書けていると思うのですが
今回はデコレータを勉強していきたいと思います。
デコレータで2つの関数を実行
それではデコレータ使って関数を実行してみたいと思います。
このデコレータではまず、second_fc()を実行すると、
①first_fcをまず実行
②second_fcを実行
のようになります。
②のprintが実行されたのはfirst_fcのreturnでsecond_fcを返しているためです。
このようにデコレータは、事前に別の関数を自動で実行を可能にする手法です。
下のコードはfirst_fc関数で、second_fc関数に渡した変数を表示している内容です。
まさに@をつけた関数を最初に実行してから、ってのが分かるかと思います。
おわりに
どうもこんばんは!!
コンです。
今回紹介させていただいた
デコレータもなかなか難しかったと思います。
正直全然使ったことない手法でしたので
私も試行錯誤しながら今回の記事を書かせてもらいました。
めちゃくちゃ難しかったよ〜泣
自分でも色々コードを書いてみて、returnに関数ではなく変数を書いたりして
なかなかコードがうまく実行できなかったり、散々でした。。。
この記事が皆様のコードの理解につながることができれば幸いです。