一、1.什么是闭包,闭包的特征?
当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外执行就产生了闭包.闭包是一个环境,具体指的就是外部函数–高阶函数。
闭包有3个特性:
①函数嵌套函数
②函数内部可以引用函数外部的参数和变量
③参数和变量不会被垃圾回收机制回收
二、定义闭包
定义闭包,完成的功能为:传入一个数求和并输出 # 定义闭包,完成的功能为:传入一个数求和并输出 # 例如: 传入10 ->输出10 # 传入15 ->输出25 # 传入20 ->输出45 def outer_summary(): sum = 0 def summary(num): nonlocal sum sum = sum + num print(sum) return summary sum1 = outer_summary() sum1(10) sum1(15) 10 25
三、函数装饰器
# 2.定义一个装饰器:打印函数运行花费的时间 # 你在执行之前获取一个时间 # 执行函数 # 在执行函数之后获取一个时间 # 去求时间差 # time模块 # import time import time def outer(func): def inner(*args, **kwargs): time1 = time.time() func(*args, *kwargs) time2 = time.time() print(time2 - time1) return inner() print(time.time()) @outer def data(): time.sleep(3) print('3') 1657460276.1883776 3 3.0149052143096924
四、类修饰器
class Student: def __init__(self, name): self._name = name def go_info(self): return self._name @staticmethod def print_info(): print("print_info") @classmethod def class_method(cls): print("This is class method") @property def data(self): return self._name @data.setter def data(self, value): self._name = value @data.deleter def data(self): del self._name student = Student("a") Student.class_method() Student.print_info() student.class_method() student.print_info() print(student.data) student.data = "dada" print(student.data) This is class method print_info This is class method print_info a dada