python: decorator for functions : preliminary research


デコレータ使ってる? by 田原 悠西さん
概要
デコレータって便利ですね。普段こんな風に使ってますという紹介をします。みなさんの使っている場面も教えてほしいです。
発表資料
lightingtalk_decorator.pdf

#!/usr/bin/python

def double(func):
    print '*',
    def f(*args,**kw):
        print '!',
        return func(func(*args,**kw))
    return f

@double
def inc0(n):
    return n

@double
def inc1(n):
    return n+1

@double
@double
def inc2(n):
    return n+1

@double
def inc3(n):
    return inc1(n)

@double
@double
def inc4(n):
    return inc1(n)

def inc5(n):
    return n + 1

if __name__ == '__main__':

    print
    print inc0(1)
    print inc1(1)
    print inc2(1)
    print inc3(1)
    print inc4(1)

    print inc5(1)
    inc5 = double(inc5)
    print inc5(1)
image 
 
hide@deb1:~$ cat deco.3.py
#!/usr/bin/python

import sys

def require_int(func):
    def wrapper(arg):
        assert isinstance(arg,int)
        return func(arg)
    return wrapper

@require_int
def p1(arg):
    print arg

if __name__ == '__main__':

    try:
        p1(3)
        p1("3")
    except:
        print sys.exc_info()[0],':',sys.exc_info()[1]



hide@deb1:~$ ./deco.3.py
3
exceptions.AssertionError :

 

 

hide@deb1:~$ more ./deco.4.py
#!/usr/bin/python

import sys
from sqlalchemy import *

en=create_engine('mysql://visite:visite@localhost/visite_development02')

def cache(func):
    data = {}
    def f(*args):
        if args in data:
            return data[args]
        result = func(*args)
        data[args] = result
        return result
    return f

def count():
    print '*',
    return en.execute('select count(*) from products').fetchall()[0][0]

@cache
def count2():
    return count()

if __name__ == '__main__':

    for x in range(0,5):
        print count(),

    print

    for x in range(0,5):
        print count2(),

    print
hide@deb1:~$ ./deco.4.py
* 1127 * 1127 * 1127 * 1127 * 1127
* 1127 1127 1127 1127 1127
 
 
turbogears.decorator
 ( /usr/share/python-support/python-turbogears/turbogears/deorator.py for Debian package )

hide@deb1:/usr/share/python-support/python-turbogears/turbogears$ find . -name "*.py" -exec grep -l weak_signature_decorator {} \;
./controllers.py
./paginate.py
./tests/test_decorator.py
./decorator.py
./identity/conditions.py

 

zop3 for debian package

hide@deb1:/usr/lib/python2.4/site-packages/zope$ find . -name "*.py" -exec grep -l formlib {} \;
./formlib/interfaces.py
./formlib/form.py
./formlib/ftests.py
./formlib/tests.py
./app/exception/browser/tests/test_unauthorized.py
./app/exception/browser/unauthorized.py
./app/zptpage/browser/zptpage.py
./app/component/browser/registration.py

 

./formlib/form.py

 
django for debian package

hide@deb1:/usr/share/python-support/python-django/django$ find . -name "*.py" -exec grep -l decorator {} \;
./db/transaction.py
./views/decorators/http.py
./views/decorators/cache.py
./views/decorators/vary.py
./views/decorators/gzip.py
./utils/simplejson/scanner.py
./utils/cache.py
./utils/decorators.py
./contrib/auth/views.py
./contrib/admin/views/main.py
./contrib/admin/views/doc.py
./contrib/admin/views/template.py
./contrib/comments/views/userflags.py

カテゴリー: 未分類 パーマリンク

python: decorator for functions : preliminary research への4件のフィードバック

  1. Unknown より:

    Hi,Do you need advertising displays, advertisement screens, LCD digital signage and LCD signages? Please go Here:www.amberdigital.com.hk(Amberdigital).we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers.
    amberdigital Contact Us
    website:www.amberdigital.com.hk
    alibaba:amberdigital.en.alibaba.com[dgfibafhbfhfaab]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中