python闭包

简单理解python中闭包的概念

1、闭包的概念

def test_add(num):
    '''
    在函数内部再定义⼀个函数,并且这个函数用到了外边函数的变量,
    那么将这个函数以及用到的一些变量称之为闭包
    '''
    def add_1(num2):
        return num+num2
    return add_1

a1 = test_add(1)
print(type(a1))
print(a1(2))
''' 结果: <class 'function'> 3 '''

 第一次调用返回函数的对象,第二次调用才是调用函数内部的方法

2、另一种闭包

def counter(start):
    '''
    内部函数对外部函数作⽤域⾥变量的引⽤(⾮全局变量),则称内部函数为
    闭包
    '''
    count = [start]
    def incr():
        count[0] += 1
        return count[0]
    return incr

c1 = counter(5)
print(c1())
print(c1())

c2 = counter(10)
print(c2())
print(c2())

'''
结果:
6
7
11
12
'''

 使用nonlocal访问外部函数的局部变量

def counter(start=0):
    def incr():
        nonlocal start
        start += 1
        return start
    return incr

c1 = counter(5)
print(c1())
print(c1())
c2 = counter(50)
print(c2())
print(c2())
print(c1())
print(c1())

print(c2())
print(c2())

'''
结果:
6
7
51
52
8
9
53
54
'''

3、实际运用

def line_conf(a, b):
    def line(x):
        return a*x + b
    return line
line1 = line_conf(1, 1)
line2 = line_conf(4, 5)
print(line1(5))
print(line2(5))

 4、闭包的作用

(1)、闭包优化了变量,原来需要类对象完成的工作,可以通过闭包完成

(2)、闭包引用了外部函数的局部变量,外部函数的局部变量无法及时释放,可以说是延长了局部变量的使用时间,避免了重复的创建,同时也消耗了内存

原文地址:https://www.cnblogs.com/wbw-test/p/10537083.html