python进阶---闭包与装饰器

一、闭包

        在Python中,闭包是指一个函数内部定义的函数,这个内部函数可以访问并修改其外部函数的局部变量,即使外部函数已经执行完毕。闭包可以通过多层函数嵌套来实现。

        闭包的三要素

        1、外部函数嵌套内部函数

        2、外部函数返回内部函数

        3、内部函数可以访问外部函数的变量

 闭包示例:

import random

def fun1():
    print("fun1")
    d0 = []

    def fun2():
        d0.append(random.randint(1, 20))
        print("fun2", d0)

    return fun2

# 不同的变量名存储的值不共用
r1 = fun1()
r1()
r1()
r1()
r1()  # fun2 [18, 4, 12, 2]

r2 = fun1()
r2()  # fun2 [13]

二、装饰器和装饰器案例

        在Python中,装饰器是一种特殊的函数,用于修改其他函数的行为。装饰器函数接受一个函数作为输入,并返回另一个函数作为输出。装饰器函数可以通过在原始函数前后添加额外的代码,或者修改原始函数的输入和输出来修改其行为。

        装饰器的语法使用@符号,将装饰器函数应用到被装饰的函数上。

先以一个计算函数运行时间的为例:

import random
import time

data = [random.randint(0, 100000) for i in range(10000)]



# 这个函数在没有使用装饰器的格式时,可以看作一个闭包,作用就是计算某个函数运行的时间
def times(f):  
    def it():
        start = time.time()
        f()
        print(time.time() - start)

    return it


def my_fun1():
    data.sort()
    print(data)

r = times(my_fun1)
r()  # 输出为 一个正序的列表   运行时间为0.007011890411376953

 函数中的r = times(my_fun1)就是装饰器的基本使用原理。下面我们把这个例子写成装饰器的样式:

import random
import time

data = [random.randint(0, 100000) for i in range(10000)]

def times(f):  
    def it():
        start = time.time()
        f()
        print(time.time() - start)

    return it

@times()  # 装饰器的书写格式
def my_fun1():
    data.sort()
    print(data)

my_fun1()  # 输出为 一个正序的列表   运行时间为0.007011890411376953

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值