python 闭包

python 闭包

什么是闭包

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/8
# 闭包,是在函数中提出的概念。

def func():
    a=100
    def func1():
        b=200
        print (a,b)
#    return a
#注意,下面不能加括号,加括号相当于调用了
    return func1
#外部调用func1 是没办法调用的,直接执行会报错,
# 也无法在这里调用a,因为a是全局变量,我们可以return a ,然后再外面有一个容器来接住a
#同理,我们也可以吧 func1扔出来,这时候,x就是里面的内部函数
x=func()
print (x)
#这时候执行x()就相当于执行func1了
x()

#像这种格式的,就叫闭包
#条件1:外部函数定义内部函数  条件2:外部函数是有返回值的, 条件3:return返回的值是内部函数名 条件4:内部函数引用了外部函数的变量。符合这样条件的叫闭包

示例

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/8
def func(a,b):
    c=100
    def func1():
        s=a+b+c
        print ('sum is :',s)
    return func1
x=func(200,200)
print (x)
x()

示例

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/9
def func():
    a=100
    def func1():
        b=90
        s=a+b
        print (s)
    def func2():
        func1()
        print ('>>>>>>>>>>func2',a)
        return 'hello'
    return func2
x=func()
print (x)
xx=x()
print (xx)

示例

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/9
def counter():
    count=[0]
    def sumcounter():
        count[0]=count[0]+1
        print ('当前是第{}次访问' .format(count))
    return sumcounter
x=counter()
x()
x()
x()
posted @ 2023-07-13 10:17  liwenchao1995  阅读(7)  评论(0编辑  收藏  举报