闭包,类装饰lianx

简介: 当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外执行就产生了闭包.闭包是一个环境,具体指的就是外部函数–高阶函数。闭包有3个特性:①函数嵌套函数②函数内部可以引用函数外部的参数和变量③参数和变量不会被垃圾回收机制回收

一、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


相关文章
|
12月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
334 31
|
传感器 监控 安全
基于物联网的智能厨房安全监测系统-下位机程序
基于物联网的智能厨房安全监测系统-下位机程序
326 20
|
移动开发 算法 机器人
DingTalk「开发者说」- 开发钉钉酷应用集成入门
本篇主要分享钉钉酷应用的群应用开发流程和实践。
DingTalk「开发者说」- 开发钉钉酷应用集成入门
|
JSON 网络协议 JavaScript
如何免费使用阿里云服务器?【一篇文章教会你,真香】
一篇文章教会你如何免费使用阿里云服务器,真香~
1326 0
如何免费使用阿里云服务器?【一篇文章教会你,真香】
|
存储 文件存储 对象存储
阿里云文件存储NAS简介及应用场景
如何使用阿里云文件存储NAS
阿里云服务器快速搭建自己的个人网站
现在作为一个IT程序猿,没有一个自己的个人网站怎么行呢,现在就连许多不是IT人员都会搭建自己的个人网站 。那作为一个IT人员,如果别人让你帮忙搭建一下网站,然而你却没玩过,说不会,岂不是很尴尬 。另外,如果你自己会搭建网站,说不定还能赚取点额外的广告收入呢 。
36694 1
|
SQL 弹性计算 分布式计算
DataWorks数据集成与开源Sqoop的对比
阿里巴巴技术专家张雅静为大家带来DataWorks数据集成与开源Sqoop的对比演讲。主要从介绍Sqoop开始谈起,接着详细介绍了DataWorks数据集成与开源Sqoop对比以及注意事项,然后着重说明了DataWorks数据集成并进行了实操演示,最后对全文进行了总结。 以下是精彩视频内容整理:
3756 0
DataWorks数据集成与开源Sqoop的对比
|
人工智能 数据可视化 机器人
阿里云RPA(机器人流程自动化)干货系列之七:编写第一个RPA应用(可视化模式)
导读:本文是阿里云RPA(机器人流程自动化)干货系列之七,我们采用可视化开发模式编写第一个RPA应用(获取淘宝网宝贝),以及如何实现机器人自动化执行流程的过程。
7724 0
|
安全 Java Linux
深度解读 | 通过FD耗尽实验谈谈使用HttpClient的正确姿势
作者:闲鱼技术-峰明 一段问题代码实验 在进行网络编程时,正确关闭资源是一件很重要的事。在高并发场景下,未正常关闭的资源数逐渐积累会导致系统资源耗尽,影响系统整体服务能力,但是这件重要的事情往往又容易被忽视。
4822 0
|
存储 对象存储
OSS产品Bucket分级的使用场景及注意事项
oss产品允许用户设置三种类型的Bucket,分别是标准(Standard)、低频(IA)、归档(Archive)三级存储类型,Bucket的类型决定了用户Object上传后的默认类型。
4794 0