X



くだすれPython(超初心者用) その36

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/01/01(月) 20:18:42.82ID:iOcRvNll
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その35
http://mevius.5ch.net/test/read.cgi/tech/1496411341/
VIPQ2_EXTDAT: checked:default:1000:512:----: EXT was configured
0247デフォルトの名無しさん
垢版 |
2018/02/03(土) 07:37:05.14ID:t4e4FmlL
Pythonの本はあらかた購入しているのだけど、デコレータがどうしても理解できない
いや説明はわかるのだが、それが何の役に立つのか理解できない
例えば以下のコードを見せられても、それが何?という感想しか出てこない
理解できないものは無視すればいいんだろうけど、Pythonドキュメントのサンプルコードに
デコレータを使っている箇所(@classmethod等)がけっこうあるため、そうも行かない
誰かデコレータについてその存在意義と有用性を教えてくれないか

----------------------
@decorate
def target():
print('running target()')

これは次と等価です

def target():
print('running target()')

target = decorate(target)
----------------------
0248デフォルトの名無しさん
垢版 |
2018/02/03(土) 09:32:41.09ID:qWVkS+Es
>>247
SQL の update とかで
デコレータ版だとトランザクションや排他処理してくれるってのがあって便利だった
0250デフォルトの名無しさん
垢版 |
2018/02/03(土) 12:20:01.23ID:5RbTAhEw
>>247
デコレーターって「高階関数の便利な使い方」って感じのものだから
根本的にはmap関数とか調べたほうがピンとくると思う。

pythonでは「関数を引数にとり、関数を返す関数」っていうのを文法上作ることができて、
「なら関数を受け取って改造して返す関数を作ってもいいよね」っていう発想が生まれて
「これ便利だから簡単に使えるようにしよう」って出来たのが@を使うデコレーター記法。

使い道としては、関数にちょっとした追加機能をつけて改造するようなものが多いと思う。
ログを取ったり、規定の文字数をオーバーしてたらエラーを返すようにしたり、
ただの文字列を返す関数をhtmlタグ付きの文字列を返すように改造したり。
■ このスレッドは過去ログ倉庫に格納されています