python闭包与装饰器

一、闭包

闭包由两部分组成:

  1. 外部函数:定义了闭包的外部环境。
  2. 内部函数:实际的闭包,它可以访问并操作外部函数的变量。
  3. 在闭包中,外部函数嵌套内部函数,外部函数返回内部函数,内部函数可以访问外部函数的变量(nonlocal)
def make_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter
 
 
counter = make_counter()
 
 
print(counter())
print(counter())
print(counter())

import random
 
 
def fun1():
    
    datas = []
 
    def fun2():
        datas.append(random.randint(0, 100))
        print("fun2", datas)
 
    return fun2
 
 
r = fun1()
r()
r()
r()
r()

二、装饰器

装饰器本质上是一个闭包。装饰器是一个函数,它接受一个函数作为参数,并返回一个新的函数。这个新的函数可以添加额外的功能,同时保持原有函数的调用方式不变。

def timer(func):
    def clo():
        start = time.time()
        result = func()
        end = time.time()
        print(f" 执行用了 {end - start} 秒。")
        return result
    return clo

@timer
def example():
    time.sleep(1)  # 模拟耗时操作
    return "函数完成"

print(example())
 执行用了 1.1788480281829834 秒。
函数完成

三、装饰器案例

简单的购物需登录案例

user =None
def login_required(f):
    def check():
        global user
        if user:
            f()
        else:
            while True:
                username = input("请输入用户名")
                password = input("亲输入密码")
                if username == "admin" and password == "123456":
                    user="admin"
                    f()
                    break
                else:
                    print("用户名或者密码错误")
    return check



def index():
    print(f"我是首页")


@login_required
def center():
    print("我是个人中心")


@login_required
def cart():
    print("我是购物车")



index()

center()

cart()

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值