目录
一、什么是闭包?
在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures), 是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。 所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
二、闭包的特征?
1、是一个嵌套函数 2、内层函数引用了外层函数的变量 3、返回值是内层函数
三、定义闭包,完成的功能为:传入一个数求和并输出
例如: 传入10 ->输出10
传入15 ->输出25
传入20 ->输出45
def outer_summary():
sum_data = 0
def summary(num):
nonlocal sum_data
sum_data = sum_data + num
print(sum_data)
return summary
summary = outer_summary()
summary(10)
summary(15)
summary(20)
结果:
10
25
45
def outer_summary():
sum_list = []
def summary(num):
sum_list.append(num)
print(sum(sum_list))
return summary
summary = outer_summary()
summary(10)
summary(15)
summary(20)
结果:
10
25
45
四、定义一个装饰器:打印函数运行花费的时间
你在执行之前获取一个时间
执行函数
在执行函数之后获取一个时间
去求时间差
time模块
import time
def outer(func):
def inner(*args, **kwargs):
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
time_dif = end_time - start_time
print("运行时间:", time_dif)
return inner
@outer
def run(*args, **kwargs):
print("函数开始执行")
time.sleep(1)
print("执行中......")
time.sleep(1)
print("函数执行完毕")
print(*args, **kwargs)
run(1, 2)
结果:
函数开始执行
执行中......
函数执行完毕
1 2
运行时间: 2.0057177543640137
五、定义一个类
要求:包含一个对象属性,且用_(单下划线)命名的
定义一个类方法(装饰器)
定义一个静态方法(装饰器)
定义委托属性(三个类装饰器): 可以访问_命名的属性的值
可以修改_命名的属性的值
可以删除_命名的属性
class Person:
def __init__(self):
self._name = "name"
@classmethod
def class_method(cls):
print("This is a class_method")
@staticmethod
def static_method():
print("This is a static_method")
@property
def get_info(self):
return self._name
@get_info.setter
def get_info(self, value):
self._name = value
@get_info.deleter
def get_info(self):
del self._name
执行:
实例一个对象
调用类方法(类和对象两种方式)
调用静态方法(类和对象两种方式)
对象.委托属性
对象.委托属性 = value
del 对象.委托属性
per = Person()
Person.class_method()
per.class_method()
Person.static_method()
per.static_method()
print(per.get_info)
per.get_info = "123"
print(per.get_info)
del per.get_info
结果:
This is a class_method
This is a class_method
This is a static_method
This is a static_method
name
123