首页 > 其他分享 >闭包之作用

闭包之作用

时间:2023-08-26 17:22:06浏览次数:30  
标签:闭包 function name age 作用 def 函数

主要的作用和用途:

  1. 保存状态:闭包可以用于保存函数的局部变量状态,这样在每次调用函数时,闭包内的变量都会被保留下来。这使得闭包非常适合用于实现计数器、缓存等功能。

  2. 延迟执行:通过使用闭包,我们可以将某个操作延迟到稍后执行。例如,可以创建一个延迟调用的函数,该函数接受一些参数,并在稍后的时间执行特定的操作。

  3. 高阶函数的参数和返回值:由于闭包是函数对象,所以它可以作为高阶函数的参数或返回值。这使得我们可以在函数之间传递闭包,从而实现更复杂的功能。

  4. 封装:闭包可以将一组相关的数据和函数封装在一起,形成一个独立的实体。这样可以提高代码的可读性,并且避免全局变量的污染。

保存状态

 1 '''
 2 保存状态:通过闭包可以实现状态的保存。
 3 例如,下面的示例中,我们创建了一个计数器函数,每次调用返回增加1的值。
 4 '''
 5 def counter():
 6     count = 0
 7 
 8     def increment():
 9         nonlocal count
10         count += 1
11         return count
12 
13     return increment
14 
15 
16 c = counter()
17 print(c())  # 输出1  保存了外部函数变量count没有被回收
18 print(c())  # 输出2
19 print(c())  # 输出3

延迟执行

 1 '''
 2 延迟执行:闭包可以用于延迟执行某些操作。例如,下面的示例中,我们创建了一个延迟调用函数,它接受一些参数,并在稍后的时间执行特定的操作。
 3 '''
 4 
 5 
 6 def delayed_call(func, *args):
 7     def wrapper():
 8         return func(*args)
 9 
10     return wrapper
11 
12 
13 def say_hello(name):
14     print(f"Hello, {name}!")
15 
16 
17 # 虽然调用了外部函数,但实际上,业务没有执行,只是返回了引用,便于后面在适合的时间执行
18 delayed_say_hello = delayed_call(say_hello, "Allen")
19 # 在适合的时间执行特定的操作
20 delayed_say_hello()  # 输出 "Hello, Allen!"

闭包&高阶函数的应用

其实把闭包的外部函数的形参变成一个函数,外部函数就变成了高阶函数。

 1 # 1. 定义一个高阶函数(也是闭包的外部函数),有一个参数func(func就是函数引用)
 2 def my_higher_order_function(func):
 3     def wrapper():
 4         print("Before calling the closure function")
 5         func()
 6         print("After calling the closure function")
 7 
 8     return wrapper
 9 
10 
11 # 2. 定义一个函数
12 def my_closure_function():
13     print("Inside the closure function")
14 
15 
16 # 3. 将函数my_closure_function作为参数传递给高阶函数,获得闭包函数wrapper的引用
17 wrapped_function = my_higher_order_function(my_closure_function)
18 
19 # 4. 调用闭包函数,实际上会在my_closure_function函数前后分别打印信息
20 wrapped_function()

封装

 1 '''
 2 封装:闭包可以将一组相关的数据和函数封装在一起,形成一个独立的实体。这样可以提高代码的可读性,并且避免全局变量的污染。
 3 '''
 4 
 5 
 6 def create_student(name, age):
 7     def get_name():
 8         return name
 9 
10     def get_age():
11         return age
12 
13     def set_name(new_name):
14         nonlocal name
15         name = new_name
16 
17     def set_age(new_age):
18         nonlocal age
19         age = new_age
20 
21     return {
22         'get_name': get_name,
23         'get_age': get_age,
24         'set_name': set_name,
25         'set_age': set_age
26     }
27 
28 
29 student = create_student("Allen", 20)
30 print(student['get_name']())  # 输出 "Allen"
31 print(student['get_age']())  # 输出 20
32 student['set_name']("Bob")
33 print(student['get_name']())  # 输出 "Bob"

 

标签:闭包,function,name,age,作用,def,函数
From: https://www.cnblogs.com/allenxx/p/17659140.html

相关文章

  • 闭包之nonlocal关键字的作用
    nonlocal关键字在闭包中的作用在Python中,默认情况下,内层函数只能访问外层函数的变量,但不能修改它们。如果希望在闭包函数中修改外层函数中的变量,可以使用nonlocal关键字来声明要修改的变量。示例1#外部函数2deffunc_out(num1):3#内部函数4deffunc_inne......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • iOS开发Swift-闭包
    1.闭包表达式语法{(参数)->return类型in//内容}letnames=["C","A","E","B","D"]funcback(_s1:String,s2:String)->Bool{returns1>s2//(B>A,C>B)}//闭包后:varreversedN......
  • 企业网站建设需要哪些基础页面(企业网站页面功能与作用)
    企业网站作为企业的门面,是互联网上展示公司形象、产品、服务以及文化的一个重要平台。一个优秀的企业网站一般需要包含一系列的关键页面。下面广州名锐讯动总结了一些常见的企业网站页面并将介绍页面的功能和作用。1.首页:首页作为企业网站的第一个页面,一般用户点击进入网站第一眼......
  • 确认测试\验收测试的作用
    确认测试确认测试也称为验收测试,它的目标是验证软件的有效性。通常,验证指的是保证软件正确地实现了某个特定要求的一系列活动;确认指的是为了保证软件确实满足了用户需求而进行的一系列活动。委托第三方软件测试机构出具的确认测试报告主要用于:1.企业申报国家、省、市科技成果......
  • osi七层模型和tcp/ip四层模型每层作用和协议
    osi七层模型:网络由下到上物理层(第1层)根据端口和MAC地址,做分组(VLAN)隔离、访问控制数据链路层将数据最终编码为用0、1的比特流,然后传输,协议有atm、802网络层主要解决如何包装数据有ip、icmp传输层主要解决数据在网络中如何传输有tcp、udp会话层定义了如何开始、控制和结束一个......
  • 浅谈视频汇聚平台EasyCVR视频平台在城市安全综合监测预警台风天气中的重要作用
    夏日已至,台风和暴雨等极端天气频繁出现。在城市运行过程中,台风所带来的暴雨可能会导致城市内涝等次生灾害,引发交通瘫痪、地铁停运、管网泄漏爆管、路面塌陷、防洪排涝、燃气爆炸、供热安全、管廊安全、消防火灾等安全隐患,影响城市的正常运行,甚至造成人员伤亡。面对台风带来的城市灾......
  • js闭包
    一,闭包是什么闭包是:函数内部和函数外部连接的桥梁;可以读取其他函数内变量的函数;可以访问外部函数的变量,并将这些变量保存在内存中,供内部函数在外部函数执行完毕后继续使用;常被用于工厂函数、模块化等场景。二,闭包优缺优点:①保护函数内的变量安全,实现封装,防止变量流入其他环境发......
  • meta标签的作用是什么
    meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta标签用于网页的<head>与</head>中,meta标签的用处很多。meta的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找me......