day16 函数对象与闭包函数
一、函数对象
函数对象的精髓就是函数可以当做变量去使用
1.1函数可以被引用
注意赋值函数不能加括号
加括号是函数的调用,不加括号是函数体内函数体代码的内存地址
def func():
print("func 函数")
f1 = func
f1()
>>>func 函数
1.2函数可以作为容器类型的元素
用这种方法也可以去优化我们多个函数的选择调用
一个函数:
def func():
print("func 函数")
dict1= {"func":func}
dict1["func"]()
>>>func 函数
多个函数:
#功能函数
def func1():
print("登录")
def func2():
print("注册")
def func3():
print("检查")
#存放功能函数的字典
func_dict = {
"0":["退出",exit],
"1":["注册",func1],
"2":["登录",func2],
"3":["检查",func3]}
while True:
for key in func_dict:
print(key,func_dict[key][0])
cmd = input("请输入指令>")
if not cmd.isdigit():
print("请输入数字")
continue
elif cmd in func_dict:
func_dict[cmd][1]()
else:
print("不存在该指令")
1.3函数可以作为参数传入另外一个函数
def func(x):
x()
def foo():
print("函数 foo")
func(foo)
>>>函数 foo
1.4函数的返回值可以是一个函数
def foo():
print("函数 foo")
def func():
return foo
res = func()
res()
>>>函数 foo
二、闭包函数
前提:
闭包函数=函数空间与作用域+函数嵌套+函数对象
核心点:名字的查找关系是以函数定义阶段为准
1 什么是闭包函数
“闭”函数:指的是该函数的内嵌函数
def foo():
def bar():
pass
#在这个场景下bar就是闭函数
“包”函数:指的是函数包含对外层函数作用域名字的引用(不是对全局作用域)
闭包函数:名称空间和作用域的应用+函数嵌套
def foo():
x=123123
def bar():
print(x)
#在这个例子里bar包含对外层函数foo内作用域里名字x的引用
#所以此时bar是闭包函数
2 闭包函数的用法
def foo():
x=123
def bar():
print(x)
return bar #foo函数的返回值是bar函数的内存地址
f = foo()#将foo函数的返回值赋值给f
f()#此时调用f函数等于在调用闭包函数bar
>>>123
此时通过引入闭包函数的概念,我们知道了两种函数体传参的方式
方式一:直接把函数体需要的参数定义成形参
def foo(x):
print(x)
foo(1)
方式二:通过闭包函数的外层函数作用域里的变量传值
def foo():
x=123
def bar():
print(x)
return bar
bar = foo()
bar()
>>>123
#上面的方式传值x固定是123,当然也可以通过传参的方式自定义传值
def f1(x):
def f2():
return x*2
return f2
f2 = f1(2)
print(f2())
>>>4
day16 函数对象与闭包函数的更多相关文章
- python中的函数对象与闭包函数
函数对象 在python中,一切皆对象,函数也是对象 在python语言中,声明或定义一个函数时,使用语句: def func_name(arg1,arg2,...): func_suite 当执行流 ...
- Python(2.7.6) 函数对象与闭包
在 Python 中,一切皆对象.函数也是对象,它可以赋值给其他变量,也可以当作参数传递. lambda 表达式可以创建函数对象,在 Python 中,lambda 表达式的函数体只能有唯一的一条语句 ...
- python函数对象和闭包
关于函数对象和闭包 闭包(closure)是函数式编程的重要的语法结构.不同的语言实现闭包的方式不同.Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法与多范式中,已经多次看 ...
- 18.C++-[ ]操作符使用 、函数对象与普通函数区别(详解)
在上章17.C++-string字符串类(详解)学习了string类,发现可以通过[ ]重载操作符来访问每个字符. 比如: string s="SAD"; for(int i=0, ...
- Python中的函数对象与闭包
函数在Python中是第一类对象,可以当做参数传递给其他函数,放在数据结构中,以及作为函数的返回结果. 下面的例子为接受另外一个函数作为输入并调用它 #foo.py def callf(func): ...
- python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...
- 函数嵌套>作用域>闭包函数
一:函数对象 函数是第一类对象,即表示函数可以当做数据传递 可以被引用:把函数内存地址赋值给一个变量名,仍然遵循函数的调用规则. 可以被当做参数传递:传递的是函数的运行的结果#可以当做返回值 把函数作 ...
- c++之函数对象、bind函数
函数对象实质上是一个实现了operator()--括号操作符--的类. class Add { public: int operator()(int a, int b) { return a + b; ...
- python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)
1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...
随机推荐
- ElasticSearch系列(二):ElasticSearch Head、Kibana、Elasticsearch-Analysis-Ik安装、使用
1.ElasticSearch Head使用 扩展程序安装插件:ElasticSearch github地址:https://github.com/mobz/elasticsearch-head/ 运 ...
- 内存管理,goto的使用,内存的申请和释放,mmap,ioremap
1.内存管理 (将物理内存映射到内核空间(3G~4G)并使用) 深入内核: 伙伴系统 1.1基本概念 1)linux内核管理内存是以物理内存页为单位 一个物理内存页通常为4KB ...
- [转] 图解单片机下载程序电路原理之USB转串口线、CH340、PL2303、MAX232芯片的使用
点击阅读原文 目前为止,我接触单片机已有不少时日,从选择元器件.原理图.PCB.电路硬件调试.软件开发也算小有心得 .单片机软件开发里面第一步当属下载程序了,如果这一步都有问题,那么后面的一切便无从谈 ...
- min_25筛入门
目录 1.什么是min_25筛 2.前置知识 2.1.数论函数 2.2.埃拉托色尼筛 2.3.欧拉筛 3.min_25筛 3.1.计算质数贡献 3.2.计算总贡献 3.3.实现 4.例题 4.1.[L ...
- XAI/MLI 可解释机器学习系列1- 开源&paper汇总
一直在关注可解释机器学习领域,因为确实在工作中有许多应用 模型检查,特征重要性是否符合预期和AUC一样重要 模型解释,比起虚无缥缈的模型指标,解释模型学到的规律更能说服业务方 样本解释,为什么这些用户 ...
- navicat 出现 mysql远程连接问题 Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
今天做服务器上的东西需要看数据库时,突然发现有这个报错,然后自己也查了很多资料 我最后找到一个在my,cnf配置文件中mysqld下加入一条 max_allowed_packet = 500M 也就是 ...
- 本地代码提交到远程仓库(git)
[准备环境] 我没有在Linux搭建gitlab私有云服务器,用的是开源的 gitee托管平台 1.在gitee注册账号 2.本地下载git客户端 [步骤] 1 本地新建1个文件夹 进入文件夹后 ...
- Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(优缺点对比)
xis,axis2,Xfire以及cxf对比 http://ws.apache.org/axis/ http://axis.apache.org/axis2/java/core/ http://xfi ...
- 尚硅谷spring 事物管理
接下来我们重点来学习spring中的事务管理 接下来我们通过代码来实现 spring实现事物我们采用aop的方式来实现 获得连接和手动设置事物相当于@before标注的前置通知,conn.commit ...
- Lens —— 最炫酷的 Kubernetes 桌面客户端
原文链接:https://fuckcloudnative.io/posts/lens/ Kubernetes 的桌面客户端有那么几个,曾经 Kubernetic 应该是最好用的,但最近有个叫 Lens ...