Python闭包如何实现函数内部变量持久化?

2026-05-26 15:470阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计638个文字,预计阅读时间需要3分钟。

Python闭包如何实现函数内部变量持久化?

封装+封装是由函数及其相关引用环境组合而成的实体(即:封装=函数块+引用环境)。+def+outer+(+n+):+num+=+n+def+inner+(+):+return+num++1+return+inner+print+(+outer+(+3+)(+))(+)


闭包

闭包是由函数及其相关的引用环境组合而成的实体(即:​闭包=函数块+引用环境​)。

def outer(n):
num = n

def inner():
return num + 1

return inner


print(outer(3)()) # 4
print(outer(5)()) # 6

在这段程序中,函数 inner 是函数 outer 的内嵌函数,并且 inner 函数是outer函数的返回值。我们注意到一个问题:内嵌函数 inner 中引用到外层函数中的局部变量num,Python解释器会这么处理这个问题呢? 先让我们来看看这段代码的运行结果,当我们调用分别由不同的参数调用 outer 函数得到的函数时,得到的结果是隔离的(相互不影响),也就是说每次调用 outer 函数后都将生成并保存一个新的局部变量num,这里outer函数返回的就是闭包。 ​如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。​

修改外部变量的值

闭包里默认不能修改外部变量。

阅读全文

本文共计638个文字,预计阅读时间需要3分钟。

Python闭包如何实现函数内部变量持久化?

封装+封装是由函数及其相关引用环境组合而成的实体(即:封装=函数块+引用环境)。+def+outer+(+n+):+num+=+n+def+inner+(+):+return+num++1+return+inner+print+(+outer+(+3+)(+))(+)


闭包

闭包是由函数及其相关的引用环境组合而成的实体(即:​闭包=函数块+引用环境​)。

def outer(n):
num = n

def inner():
return num + 1

return inner


print(outer(3)()) # 4
print(outer(5)()) # 6

在这段程序中,函数 inner 是函数 outer 的内嵌函数,并且 inner 函数是outer函数的返回值。我们注意到一个问题:内嵌函数 inner 中引用到外层函数中的局部变量num,Python解释器会这么处理这个问题呢? 先让我们来看看这段代码的运行结果,当我们调用分别由不同的参数调用 outer 函数得到的函数时,得到的结果是隔离的(相互不影响),也就是说每次调用 outer 函数后都将生成并保存一个新的局部变量num,这里outer函数返回的就是闭包。 ​如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。​

修改外部变量的值

闭包里默认不能修改外部变量。

阅读全文