Python Day 4関数装飾器

1800 ワード

組み込み関数:
リファレンス
https://docs.python.org/2/library/functions.html
デコレーション
アクセラレータは関数ですが、この関数は特別な意味を持つことができます.アクセラレータは関数やクラスを装飾するために使用され、アクセラレータを使用して関数の実行前と実行後に対応する操作を追加することができます.
#関数を定義します.呼び出しのため、関数の内部では実行されません.
#関数名>代指関数
#@+関数名
#機能:
#     1. outer関数を自動的に実行し、次の関数名f 1をパラメータとして渡す
#     2. outer関数の戻り値をf 1に繰り返し割り当てる
example 1:
#!/usr/bin/env python

# Author: Leon Wang Email: [email protected]


def outer(func):
    def inner(*args,**kwargs):
        print('before')
        r = func(*args,**kwargs)
        print("after")
        return r
    return inner



@outer

def f1(arg):
    print(arg)
    return"comeon"


@outer
def f2(arg1,arg2):
    print("F2")




ret=f1("getdown")
print("   ",ret)
f2(22,33)

example 2:
#!/usr/bin/env python

# Author: Leon Wang Email: [email protected]
'''
def f1():
    print(123)


def f2(a):
    print(456)
f2(f1)
'''
'''
def login(func):
    print("NB, passed user verification.....")
    return func

def home(name):
    print("Welcome [%s] to home page" % name)
@login
def tv(name):
    print("Welcome [%s] to tv page" % name)

def movie(name):
    print("Welcome [%s] to movie page" % name)


#tv = login(tv)
tv("Leon")
'''


def login(func):
    def inner(arg):
        print("NB, passed user verification.....")
        func(arg)
    return inner


def home(name):
    print("Welcome [%s] to home page" % name)


@login
def tv(name):
    print("Welcome [%s] to tv page" % name)


def movie(name):
    print("Welcome [%s] to movie page" % name)


#tv = login(tv)
tv("Leon")