タグ

programmingとdecoratorに関するsuzukiMYのブックマーク (7)

  • Python: 色々なデコレータの作り方と使い方、そして本質

    Python にはデコレータという特徴的な構文がある。 この構文を使うと GoF のデザインパターンの一つ、デコレータパターンが作りやすくなる。 デコレータパターンは、ある関数やメソッドの処理内容のラッピングや、関数やメソッドのマーキングを通して様々な用途に使える。 まずは、デコレータの最も基的な使い方を以下に示す。 デコレータを使って修飾対象の処理をラッピングする。 サンプルコードでは ‘main’ 関数を 'decorator’ デコレータで修飾することで、元の処理内容に 'print’ 関数の実行を挿入している。 #!/usr/bin/env python # -*- coding: utf-8 -*- def decorator(func): def _decorator(*args, **kwargs): print('decorate') return func(*args,

    Python: 色々なデコレータの作り方と使い方、そして本質
  • Python デコレータ再入門  ~デコレータは種類別に覚えよう~ - Qiita

    Pythonのアットマーク(@)を使った記法であるデコレータについてまとめる。難しいと思われているかもしれないデコレータだが、デコレータの種類(パターン)を意識することが理解の近道だと思ったので今回は種類別にデコレータの簡単な実装例をあげて解説をしていこうと思う。 対象者 Python のデコレータを学んだことがあるがたまに分からなくなる デコレータを自作しろと言われたらスラスラかけるか不安 知っていると良いこと 関数のスコープ 第一級関数 *args , **kwargs のような記法 デコレータ関数の種類分け 以下2つの要因でデコレータ関数の種類分けが可能だと思われる。 引数を取るか否か ラッパー関数を返すか否か よって組み合わせから計4つのパターンが考えられるが、今回は "引数を取らずラッパー関数を返さないデコレータ"を除いた3つを紹介する。1つ除外する理由は簡単すぎて意味がなさそう

    Python デコレータ再入門  ~デコレータは種類別に覚えよう~ - Qiita
  • Pythonのデコレータを理解するときに残したメモ - PYTHONIC BOOM BOOM HEAD

    Pythonのデコレータ(decorator)を理解する 3 - -を1,2,3全て読んで、以前僕がデコレータを理解するために残したメモもこんな感じだったなというのを思い出した。ずっと記事にしようと思いつつ忘れてたんだけどせっかくなので加筆修正しつつ公開してみる。 引数無しのデコレータ デコレータとは、その名の通り元の関数を装飾するもの。別の言い方をすれば、元の関数そのものを弄ること無く挙動を変更するもの。 まずは単純なデコレータから。 def hello(function): def _hello(*args, **kw): result = function(*args, **kw) return "Hello, {0}".format(result) return _hello @hello def name(arg): """my docstring""" return arg #

    Pythonのデコレータを理解するときに残したメモ - PYTHONIC BOOM BOOM HEAD
  • Pythonのデコレータを理解するための12Step - Qiita

    古い記事なんですが, Pythonのデコレータの概念をつかむには良記事だったので和訳意訳してみました. http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/ Step1. 関数 これは基ですね. Pythonにおいて関数はdefキーワードにより関数名とパラメータのリスト(任意)とともに定義できます.また括弧付きで名前を指定することで実行できます. Step2. スコープ Pythonでは関数を作ると新しいスコープが作られます.言い方を変えるとそれぞれの関数がそれぞれに名前空間を持つということです. Pythonではこれらを確認することのできる組み込み関数も用意されていて, locals()で自身の持つローカルな名前空間の値を辞書形式で返却します.

    Pythonのデコレータを理解するための12Step - Qiita
  • Pythonのデコレータ(decorator)を理解する 3 - Soleil cou coupé

    承前:Pythonのデコレータ(decorator)を理解する 2 デコレータに引数を渡す 素晴らしい、ではデコレータ自身に引数を渡すにはどうしたらよいのだろうか? さて、デコレータは引数として関数を受け入れる必要があるのでちょっとやっかいだ。デコレータに直接デコレートされた関数-引数を渡すことはできないからだ。 解決を急ぐ前に、ちょっと復習をしよう。 # デコレータは'普通'の関数である def my_decorator(func): print "I am a ordinary function" def wrapper(): print "I am function returned by the decorator" func() return wrapper # そのため、なにも"@"など使わずに呼び出すことができる def lazy_function(): print "zzz

    Pythonのデコレータ(decorator)を理解する 3 - Soleil cou coupé
  • Pythonのデコレータ(decorator)を理解する 2 - Soleil cou coupé

    承前:Pythonのデコレータ(decorator)を理解する 1 デコレータ詳説 先の例に対して、デコレータ構文を使うと次のようになる: @my_shiny_new_decorator def another_stand_alone_function(): print "Leave me alone" another_stand_alone_function() #出力: #Before the function runs #Leave me alone #After the function runs そう、これで全部、シンプルだ。@decoratorは単なる、 another_stand_alone_function = my_shiny_new_decorator(another_stand_alone_function) のショートカットにすぎない。Decoratorはデザインパ

    Pythonのデコレータ(decorator)を理解する 2 - Soleil cou coupé
  • Pythonのデコレータ(decorator)を理解する 1 - Soleil cou coupé

    StackOverFlow:Understanding Python decoratorsに対するe-satis氏によるデコレータの丁寧な解説。 一つエクスキューズしておくと、翻訳の作法とかよく分かってません。でも頑張ったつもり。つもり。 Imran氏による質問の内容 @makebold @makeitalic def say(): return "Hello" というデコレータに対して <b><i>Hello</i></b> という文字列を返すような関数ってどうやって書いたらいいの? e-satis氏による解説 Pythonの関数はオブジェクトである デコレータを理解するためには、まずPythonにおける関数がオブジェクトであることを理解しなければならない。このことは重大な影響をもたらす。なぜなのか簡単な例とともに見てみよう。 def shout(word="yes"): return

    Pythonのデコレータ(decorator)を理解する 1 - Soleil cou coup&#233;
  • 1