1、闭包
"""
什么是闭包?
简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。
闭包的特征?
1)有内层函数和外层函数,
2)内层函数调用了外层函数的临时变量/参数 ,
3)外层函数返回内层函数的引用
"""
# 定义闭包,完成的功能为:传入一个数求和并输出
class pack:
def fun1(self):
list_data = []
def fun2(data):
list_data.append(data)
print(sum(list_data))
return fun2
p1 = pack()
f = p1.fun1()
# 例如: 传入10 ->输出10
f(10)
# 传入15 ->输出25
f(15)
# 传入20 ->输出45
f(20)
2、装饰器
#定义一个装饰器:打印函数运行花费的时间
# 你在执行之前获取一个时间
# 执行函数
# 在执行函数之后获取一个时间
# 去求时间差
# time模块
import time
def outer(fun):
def inner():
tim1 = time.time()
fun()
tim2 = time.time()
print(tim2 - tim1)
return inner
@outer
def fun3():
for i in range(10000000):
pass
fun3()
3、委托属性
# 4.定义一个类:
# 要求:包含一个对象属性,且用_(单下划线)命名的
# 定义一个类方法(装饰器)
# 定义一个静态方法(装饰器)
# 定义委托属性(三个类装饰器): 可以访问_命名的属性的值
# 可以修改_命名的属性的值
# 可以删除_命名的属性
class A:
def __init__(self, a):
self._a = a
@staticmethod
def fun_static():
print("static")
@classmethod
def fun_cls(cls):
print(cls)
@property
def a(self):
return self._a
@a.setter
def a(self, val):
self._a = val
@a.deleter
def a(self):
del self._a
# 执行:
# 实例一个对象
a1 = A(1)
# 调用静态方法(类和对象两种方式)
A.fun_static()
a1.fun_static()
# 调用类方法(类和对象两种方式)
A.fun_cls()
a1.fun_cls()
# 对象.委托属性
a1.a
# 对象.委托属性 = value
a1.a = 2
# del 对象.委托属性
del a1.a