初识闭包

Posted jb9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识闭包相关的知识,希望对你有一定的参考价值。

‘‘‘
闭包的概念:函数里面嵌套函数,外层函数返回里层函数,这种情况称之为闭包
闭包是概念,不是某种函数类型,是一种特殊的函数调用
闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁。
‘‘‘
‘‘‘
函数里面可以在定义函数,那么函数里面定义的函数可以在外面调用吗?
如果可以的话,怎么做呢?
‘‘‘
# 正常嵌套函数使用举例:
def func():
    print("这是func在调用")
    def func1():
        print("这是func1在调用")
    func1() #这个调用与def func1处于同一级,调用func1()
func()
# 这是func在调用
# 这是func1在调用

# 闭包:函数里面嵌套函数,外层函数返回里层函数,注意是返回,而不是在里面直接调用.
def func():
    def func1():
        return "hello"
    return func1 #注意不要写括号,因为加了括号就是调用,我们这里需要返回的是函数体.
func() #这样写运行没有任何输出,因为现在的func()相当于在使用func1返回的函数体,即返回func1函数体.
# func()相当于func1,就是一个函数对象,要调用很简单func()()
func()() #此时还是没有输出,为什么呢?注意是返回值的形式,需要去接收它.
a = func()() #将返回值赋给变量a
print(a)

#------------里面还可以写更多函数------------------------------------
def func():
    def func1():
        return "Hello"
    def func2():
        return "LuXi"
    def func3():
        return "Good"
    return func2 #注意这里想在外面使用哪一个,这里就返回哪一个.
func()()
a = func()()
print(a) #结果为func2函数的返回值LuXi

#------闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁。-------------------
def func():
    a = 100
    def func1():
        return a+a
    return func1
b = func()()
print(b) #结果为200,验证闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁.

 

以上是关于初识闭包的主要内容,如果未能解决你的问题,请参考以下文章

初识js中的闭包

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识闭包

JavaScript 初识闭包closure及总结

初识模块化