首页 > 其他分享 >闭包的含义

闭包的含义

时间:2024-09-03 22:36:30浏览次数:3  
标签:闭包 func2 func1 函数 含义 print def

目录

闭包的含义

在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包

闭包可以用来在一个函数与一组"私有"变量之间创建关联关系.在给定函数被多次调用的过程中,这些私有变量能够保持其持久性.

这种叫做嵌套函数

def func1():
    print('func1')
    def func2():
        print('func2')
    func2()

func1()

此时对于当前文件,a为全局变量,b为局部变量

a=1
def func3():
    print('func3')
    b=2
func3()
print(b)

一个函数的返回值,也可以是一个函数的引用

def func1():
    print('func1')
    def func2():
        print('func2')
    return func2
f1 = func1()
print(f1)
print(type(f1))
f1()

输出结果如下

func1
<function func1.<locals>.func2 at 0x000002B933B84CC0>
<class 'function'>
func2

如果我们有一个函数,让它可以任意的计算一个值的任意次幂等

def wapper(exponent):
    def exponent_of(base):
        return base ** exponent
    return exponent_of

#计算一个数字的平方
square = wapper(2)
#计算2,3,4的平方
print(square(2))
print(square(3))
print(square(4))

下面的执行结果就很像,通过wapper(2)持久化地获取到一个工具,此工具可以将任意数字的平方返回,这种写法就叫做闭包的写法
执行结果

4
9
16

标签:闭包,func2,func1,函数,含义,print,def
From: https://www.cnblogs.com/anyux/p/18395593

相关文章

  • python回调函数,闭包,派生
    回调函数:传入函数名称,在函数内调用该函数,传参,在特定的地方执行defsum(a,b,callback):  c=a+b  callback(c)defs_print(msg):  print("callback:%s"%msg)defs_print2(msg):  print("callback2:%s"%msg)sum(1,3,s_print2) 闭包:defouter_fu......
  • 详解 ThreadPoolExecutor 的参数含义及源码执行流程?
    Java学习+面试指南:https://javaxiaobear.cn线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说线程池的话一定离不开Th......
  • 类图各个箭头和符号的含义
    参考资料:看懂类图和时序图案例:车的类图结构为<<abstract>>,表示车是一个抽象类;它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;小汽车与发动机之间是组......
  • 大语言模型的超参数含义: Top-P 采样; Top-P 采样;logit_bias:
    目录大语言模型的超参数含义 Top-P采样频率惩罚(FrequencyPenalty)top_k:logit_bias:top_logprobs:max_tokens:大语言模型的超参数含义 Top-P采样含义:一种采样替代方法,称为核采样。模型考虑top_p概率质量的token结果。例如,0.1表示仅考虑组成前10%概率质量的token......
  • JavaScript中闭包详解+举例,闭包的各种实践场景:高级技巧与实用指南
    目录闭包的各种实践场景:高级技巧与实用指南一、什么是闭包?1、闭包的基本概念2、闭包的工作原理3、闭包的用途二、闭包的实际应用场景1、模拟私有变量2、事件处理和回调函数3、延迟函数和异步操作4、柯里化5、备忘录模式(Memoization)三、闭包的性能问题1、内存泄漏......
  • JavaScript - 闭包
    使用场景数据封装闭包允许创建私有变量,这些变量在函数外部无法直接访问。通过闭包,可以创建具有私有状态的对象,从而实现数据封装。例如:functioncreateCounter(){letcount=0;//count是私有变量returnfunction(){count++;returncount;};}const......
  • Javascript里的闭包
    闭包闭包,允许函数访问创建时的作用域中的变量,即使该函数在其原始作用域之外被执行。这使得闭包非常适合用于封装私有变量和创建具有特定状态的函数。Javascript里的闭包functioncreateCounter(){letcount=0;//计数器的私有变量return{increment:f......
  • AI - 一文了解AIOps的含义、特点与功用
    AIOps定义AIOps是智能运维(ArtificialIntelligenceforITOperations)的英文缩写。当今,专业厂商根据自身理解和商业目的,分别给出了各具特色的AIOps定义。主要关键字:IT运维、人工智能(AI)、机器学习(ML)、自然语言处理(NLP)、大数据、数据分析、运营效率等以下是来自Elastic、IBM......
  • 28:函数闭包与装饰器
    l=[1,3]l.__iter__()#迭代器#装饰器:本质就是函数,功能是为其他函数添加附加功能#原则:#1.不修改被修饰函数的源代码#2.不修改被修饰函数的调用方式#装饰器的知识储备#装饰器=高阶函数+函数嵌套+闭包#adefcal(l):res=0foriinl:res+=ireturnr......
  • 常见的网站错误码及其含义
    一、1xx信息性状态码100Continue:表示目前为止一切正常,客户端可以继续发送请求或者忽略这个响应。101SwitchingProtocols:服务器根据客户端的请求切换协议。二、2xx成功状态码200OK:请求成功,一般用于GET和POST请求。201Created:请求成功并且服务器创建了新的资源。20......