在学习闭包的过程中有不少疑惑,查看了一些书籍资料和很多前辈的博客,感觉大都写的比较严谨或者比较学术化,还是不能帮助新手理解闭包的操作过程,以下内容主要是基于个人为了好理解闭包操作而总结,并不严谨,仅供参考。
首先看什么是内部函数?
在函数内部声明的函数就是内部函数
格式:
def 函数名():
局部变量...
def 内部函数名():
Python功能代码...
示例:
def funName():
name = 'dragon'
def inner():
print('我是内部函数')
'''注释:
1.内部函数的本质就是局部变量(函数就是一个变量)
2.内部函数在函数外部不可以直接调用
3.内部函数在函数内部调用(当然,必须要定义内部函数之后才能调用)
'''
内部函数是函数内部声明的函数,不能直接在外部函数调用,因此:把内部函数(或者局部变量)能够调到全局环境中使用的方法就是闭包操作
以下是闭包最常用方法
思路:为了把函数内部的局部变量和内部函数调到全局变量,就在函数内部再写一个函数,这个函数可以没有具体函数式,新建函数的目的就是利用return语句调出我们想要的局部变量和内部函数
格式:
def 函数名():
局部变量...
def 内部函数名():
pass
return (局部变量,内部函数...)
示例:
def outer():
money = 100
count = 10
strs = 'boys'
def inner(a,b):
result = a + b
print(result)
def myfunc():
pass
return money,inner
return myfunc
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
接下来一层层运行函数就可以得到我们想要的局部变量和内部函数了
# 运行outer函数返回得到myfunc函数,用func1接收
func1 = outer()
# 运行func1函数返回得到money变量和inner函数组成的元组,再通过索引分别得到
func2 = func1() #用func2接收func1运行得到的元组
# 获取money变量
vars = func2[0]
# 获取inner函数
func = func2[1]
这样我们就成功把局部变量money和内部函数inner拿到全局环境中了!
Python学习交流、资源共享群:563626388 QQ