当前位置:网站首页>闭包,装饰器,类方法,静态方法,委托属性
闭包,装饰器,类方法,静态方法,委托属性
2022-07-31 05:18:00 【m0_59138290】
闭包
闭包就是外部函数中定义一个内部函数,内部函数引用外部函数中的变量,外部函数的返回值是内部函数
闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)
在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),
是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
- 闭包的特征:
嵌套函数
内层函数引用外层函数的变量
将内层函数作为外层函数的返回值
定义闭包,完成的功能为:传入一个数求和并输出
例如: 传入10 ->输出10
传入15 ->输出25
传入20 ->输出45
def outer_summary():
sum_data = []
def summary(num):
sum_data.append(num)
print(sum(sum_data))
return summary
summary = outer_summary()
summary(10)
summary(15)
summary(20)
装饰器
什么是装饰器?
装饰的目标是什么? 也是一个函数
用什么去装饰: 用函数去装饰
功能: 在原有基础上去做一些额外的事情
装饰器的本质:函数去装饰函数(原): 原函数不做更改
总结:在不改变原函数的前提下,来增强原函数的功能
装饰器就是一个闭包,装饰器是闭包的一种应用。
定义一个装饰器:打印函数运行花费的时间
你在执行之前获取一个时间
执行函数
在执行函数之后获取一个时间
去求时间差
time模块
import time
def index1():
time.sleep(1) # 让程序休眠1秒钟
print('这里是index函数')
def home():
time.sleep(1) # 让程序休眠1秒钟
print('这里是home函数')
# 装饰器
def outer(function_name):
def inner():
# 获取运行函数前的时间
start_time = time.time()
# 调用名为function_name函数
function_name()
# 获取函数运行结束后的时间
end_time = time.time()
# 输出时间差
print(end_time - start_time)
# 返回内部函数名
return inner
@outer
def get_time():
index1()
home()
get_time()
类方法,静态方法,委托属性
定义一个类:
要求:包含一个对象属性,且用_(单下划线)命名的
定义一个类方法(装饰器)
定义一个静态方法(装饰器)
定义委托属性(三个类装饰器): 可以访问_命名的属性的值
可以修改_命名的属性的值
可以删除_命名的属性
执行:
实例一个对象
调用类方法(类和对象两种方式)
调用静态方法(类和对象两种方式)对象.委托属性
对象.委托属性 = value
del 对象.委托属性
class Person:
def __init__(self, name, age):
self._name = name
self.age = age
def get_info(self):
return self._name + str(self.age)
@staticmethod
def print_info():
print("INFO")
def test_func(self):
print(self._name)
# print_info()
@classmethod
def class_method(cls):
print(cls)
@property
def get_name(self):
return self._name
@get_name.setter
def get_name(self, value):
self._name = value
def set_name(self, value):
self._name = value
@get_name.deleter
def get_name(self):
del self._name
person = Person("Alex", 18)
print(person.get_name)
person.get_name = "Jerry"
print(person.get_name)
person.print_info()
print(person.get_info())
del person.get_name
边栏推荐
猜你喜欢
Incredibuild 宣布支持 Yocto
Pytorch study notes 7 - processing input of multi-dimensional features
Cholesterol-PEG-Amine CLS-PEG-NH2 Cholesterol-Polyethylene Glycol-Amino Research Use
一种用QT实现即时通信软件表情发送与接收的思路
Learning and understanding of ROS service programming
Wlan实验(ENSP)
螺旋矩阵Ⅱ
变更管理与 DevOps —— 二者同时进行吗?
DSPE-PEG-COOH CAS: 1403744-37-5 Phospholipid-polyethylene glycol-carboxy lipid PEG conjugate
Getting Started with MySQL: The Case Statement Works Well
随机推荐
CSDN上markdown编写的一些便捷操作
测试CSDN积分需求
Unity版本升级问题总结
实现离线文件推流成rtsp 2
a:自我介绍
Research reagents Cholesterol-PEG-Maleimide, CLS-PEG-MAL, Cholesterol-PEG-Maleimide
Unity加载GIf动画
DOM-DOM的介绍以及通过方法获取元素
IDEA控制台不能输入信息的解决方法
5G的用途和工作原理
关于Iframe
Image binarization processing of opencv
Pytorch study notes 13 - Basic_RNN
滴滴被罚超80亿!收集并泄露1.07亿条乘客人脸识别信息
日志jar包冲突,及其解决方法
小型网站组建(ENSP)
crontab timing operation
力扣.三数之和/四数之和
Unity软件中UGUI和NGUI的多语言开发
Detailed explanation of mysql transaction principle