タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

pythonとPythonとdecoratorに関するishideoのブックマーク (27)

  • ishideoのブックマーク / 2009年1月14日 - はてなブックマーク

    Pythonでプログラムを書いていると、よく関数の中で関数を作ることがあります。 Python はクロージャに対応していて、関数の中で作られた関数は、外側の関数のローカル変数を参照することができます。 クロージャが一番役に立つ場面がデコレータです。次の例では、引数を取るデコレータを作るために関数内関数を2段階作成し、それぞれのローカル変数を一番内側から参照しています(このプログラムは、Python 2.6とPython 3.0の両方で動きます⁠)⁠。 リスト1 # coding: utf-8 from __future__ import print_function import sys def log(out=sys.stderr): def decorator(func): name = func.__name__ def decorated(*args, **kwargs): ###

  • Pythonデコレータが熱い - なんたらノート第三期ベータ

    今回は decorator 3.4.0 : Python Package Index のお話。 Pythonのデコレータは便利です。関数の実体定義直後に、任意のフィルタをその関数に施すことができます。 def special(func): def invoker(*args, **kw): return "special " + func(*args, **kw) invoker.__name__ = func.__name__ invoker.__dict__.update(func.__dict__) invoker.__doc__ = func.__doc__ invoker.__module__ = func.__module__ return invoker #改変した関数を返す @special def myproc(): return "hoge" #ここで myproc =

    Pythonデコレータが熱い - なんたらノート第三期ベータ
  • 第1回 nonlocalでクロージャが便利に | gihyo.jp

    Pythonでプログラムを書いていると、よく関数の中で関数を作ることがあります。 Python はクロージャに対応していて、関数の中で作られた関数は、外側の関数のローカル変数を参照することができます。 クロージャが一番役に立つ場面がデコレータです。次の例では、引数を取るデコレータを作るために関数内関数を2段階作成し、それぞれのローカル変数を一番内側から参照しています(このプログラムは、Python 2.6とPython 3.0の両方で動きます⁠)⁠。 リスト1 # coding: utf-8 from __future__ import print_function import sys def log(out=sys.stderr): def decorator(func): name = func.__name__ def decorated(*args, **kwargs): ###

    第1回 nonlocalでクロージャが便利に | gihyo.jp
  • Young risk taker.: Pythonでデコ•メソッドキャッシュ (memcached)

    おっPythonハカーを多数抱える、煩悩駆動開発で有名なglucose.jpのお手伝いをする機会があり、4年ぶりにPythonを書いた。2.3以来だったので、2.5を眺めているとデコレーターと呼ばれる機能が導入されていた。 デコレーターとクロージャーを組み合わせれば、メソッドの挙動を自由にカスタマイズすることができる。この機能を使用して、関数の結果をmemcachedでキャッシュする機能を付与するデコレーターを作ってみた。 あらかじめ、CACHE変数をmemcachedクライアントで初期化しておく必要がある。 挙動 ソースは、少々ややこしいけど、実行の仕組みは単純。 Step 1: @cached構文実行時に、ack関数に対して、cached関数が実行され、ack関数がdecorated_funcを呼び出した結果でack関数が置換される。(返り値は、callableなオブジェクトでないとい

  • Python decorator

    python のデコレーター構文 @decorate 解り難い @decorate 構文 Python のデコレーターは理解するのが厄介です。Python のデコレーターは syntax sugar の機能と closure の機能の二つを使って関数オブジェクトを修飾する構文です。でも closure の概念がない C/C++Java などの 言語から python も使うようになった者に、三重にネストした関数と @decorator 構文を組み合わせたコード例を使って解説されたのでは脳みそが沸騰するだけです。 私は @decorator を使ったコード例の python virturla machine コードを追跡することで、やっとこさデコレーターを理解しました。私の味わされた苦労を軽減してもらうため、この web page をまとめてみます。 デコレーターを理解した後で考え直し

  • IBM Developer

    IBM Developer
  • カリー化デコレータ - blanket log

    Python のデコレータはなかなか面白い機能だと思ったので、試しにカリー化を実装してみました。 @curry def f(x,y,z): ... などと書くと、カリー化されたfが定義されます。まぁ functools.partial があれば全然必要無いシロモノではあるのですが。 複数まとめて関数適用するとき f(x)(y)(z) とか気持ち悪いので、f.apply(x,y,z) みたいに普通っぽく呼び出せるようにもなっています。 可変長引数とは相性悪いです(*付き引数=引数1個ぶんとして扱われます)。 def arity_of(f): return len(f.func_code.co_varnames) class curry: def __init__(self, f, n=None, args=None): self.func = f self.arity = n if n !=

    カリー化デコレータ - blanket log