码迷,mamicode.com
首页 > 编程语言 > 详细

04_Python装饰器(一)

时间:2016-05-30 23:03:48      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

 

1.1 初识装饰器

s2.py

def outer(func):
    def inner():
        print(‘log‘)
        return  func()
    return inner
 

@outer
def f1():
    print("F1")
 
@outer
def f2():
    print("F2")
 
@outer
def f100():
    print("F100")

b2.py

import s2

s2.f1()
s2.f2()
s2.f100()

def f1():
    print(123)
def f1():
    print(456)
f1()

# 输出结果:
# 456

def f1():
    print(‘123‘)

def f2(xxx):
    xxx()
f2(f1)

# 输出结果:
# 123

1.2 装饰器

格式:@ + 函数名

功能:

     1.自动执行outer函数,并且将其下面的函数名(f1)当作参数传递

     2.将outer函数的返回值,重新赋值给其下面的函数的参数

1.3 装饰器执行原理

s4.py

def outer(func):
    def inner():
        print("before")
        func()
        print("after")
    return inner

@outer
def f1():
    print("F1")

b2.py

import s4

s4.f1()

输出结果:
before
F1
after

 

装饰器返回值,不改变原函数返回内容

s4.py

def outer(func):
    def inner():
        print("before")
        r = func()
        print("after")
        return r
    return inner
 
@outer
def f1():
    print("F1")
    return "kanni"
b2.py
import s4
ret = s4.f1()
print("返回值", ret)

有参数的函数

s4.py

def outer(func):
    def inner(a):
        print("before")
        r = func(a)
        print("after")
        return r
    return inner
 
@outer
def f1(arg):
    print(arg)
    return "kanni"
 

b2.py

import s4
ret = s4.f1(‘fafafa‘)
print("返回值", ret)
 

万能参数

s4.py

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 "kanni"

@outer
def f2(a1, a2):
    print("F1")

b2.py

import s4

ret = s4.f1(‘fafafa‘)
print("返回值", ret)

s4.f2(11,22)

 

用户管理系统示例

LOGIN_USER = {"is_login": False}

def outer(func):
    def inner(*args, **kwargs):
        if LOGIN_USER[‘is_login‘]:
            r = func()
            return r
        else:
            print("请登录")
    return inner


@outer
def order():
    print("欢迎%s登录" % LOGIN_USER[‘current_user‘])

@outer
def changepwd():
    print("欢迎%s登录" % LOGIN_USER[‘current_user‘])


@outer
def manager():
    print("欢迎%s登录" % LOGIN_USER[‘current_user‘])


def login(user, pwd):
     if user == "alex" and pwd == "123":
         LOGIN_USER[‘is_login‘]  = True
         LOGIN_USER[‘current_user‘] = user
         manager()


def main():
    while True:
        inp = input("1.后台管理 2.登录")
        if inp == ‘1‘:
            manager()
        elif inp == ‘2‘:
            username = input("请输入用户名")
            pwd = input("请输入密码")

            login(username, pwd)

main()

  

04_Python装饰器(一)

标签:

原文地址:http://www.cnblogs.com/liangdalong/p/5544015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!