python装饰器,闭包

#函数闭包(内部函数引用外部函数的变量)
def outfunc():
    a='test'
    def intfunc():
        print(a)
    return intfunc
v = outfunc()
v()
#装饰器
import time
def time_func(f):
    def inner():
        start = time.time()
        ret=f()
        end = time.time()
        print(end-start)
        return ret
    return inner
@time_func
def func1():
    time.sleep(1)
    print('2025 happy new year!')

func1()
#装饰带参数的装饰器
import time
def time_func(f):
    def inner(*args, **kwargs):
        start = time.time()
        ret = f(*args, **kwargs)
        end = time.time()
        print(end - start)
        return ret
    return inner
@time_func
def func1(a,b):
    time.sleep(2)
    print('2025 happy new year!',a,b)

func1('joy','mimi')

#装饰器模板格式
def wrapper(f):
    def inner(*args, **kwargs):
        #被装饰函数之前要做的事情
        ret=f(*args, **kwargs)
        #被装饰函数之后要做的事情
        return ret
    return inner
@wrapper
def func(a,b):
    print(a,b)
    return 'value'
func(1,2)

#登录装饰器
def login(func):
    def inner(*args, **kwargs):
        auth_list={}
        count=0
        while True:
            count=count+1
            if count > 3:
                print('输入错误次数过多')
                break
            else:
                username = input("登录用户: ")
                password = input("登陆密码: ")
                with open('auth',mode='r',encoding='utf-8') as f:
                    for line in f:
                        line_list = line.split(':')
                        auth_list[line_list[0]] = line_list[1].strip()
                if auth_list.get(username) == password:
                    print("登陆成功")
                    ret = func(*args, **kwargs)
                    return ret
                else:
                    print("用户或密码错误")
    return inner

@login
def select_func():
    print('查询程序运行')

select_func()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容