python 闭包

·

1 min read

参考

Python closures tutorial - using closure functions in Python

👍A Dive Into Python Closures and Decorators - Part 1 | Codementor

引入

在 Python 中函数是和其他变量一样平等的一等公民。Functions can be assigned to variables, stored in collections, created and deleted dynamically, or passed as arguments.

嵌套函数,也叫内函数。闭包是一个嵌套函数,它可以从已完成执行的封闭函数中访问自由变量。

Python 闭包的特点:

  • 嵌套函数;
  • 可以使用范围外的自由变量(包括外函数之外的全局变量);
  • 可以从封闭函数处被返回;

闭包的好处:

  • 避免过多地使用全局变量;
  • 隐藏数据;

如果想在嵌套函数中改变变量的数值,使用nolocal

例子

def make_counter():

    count = 0
    def inner():

        nonlocal count
        #这样 count就会改变;
        count += 1
        return count

    return inner


counter = make_counter()

c = counter()
print(c)
#--》 1

c = counter()
print(c)
#--》 2

c = counter()
print(c)
#--》 3

如果不用nolocal我们也可以使用一些可变类型来进行存储,比如列表。