Python进阶如何修改闭包内使用的外部变量?

260 阅读2分钟

  在Python中,闭包是指一个函数对象,它可以访问并记住在其定义范围内的非全局变量。闭包可以在函数内部定义一个内嵌函数,并返回内嵌函数作为结果。内嵌函数可以访问外部函数的变量,即使外部函数已经执行完毕。

  当闭包内部使用外部变量时,如果想要修改这个外部变量的值,可以通过以下两种方式实现:

  使用nonlocal关键字:在闭包内部,可以通过nonlocal关键字声明一个变量,使得闭包内部的变量与外部函数的变量绑定在一起。这样,当在闭包内部修改这个变量时,会直接修改外部函数的变量。

  示例:

  def outer_func():

  x=10

  def inner_func():

  nonlocal x

  x+=1

  print(x)

  return inner_func

  closure=outer_func()

  closure()#输出11

  closure()#输出12

  在上面的示例中,inner_func是一个闭包函数,它使用了外部函数outer_func的变量x。通过在inner_func中使用nonlocal关键字声明x,可以在闭包内部修改外部函数的变量x的值。

  将外部变量封装成可变对象:如果外部变量是不可变对象(如数字、字符串、元组等),则无法直接修改其值。但可以将其封装成可变对象(如列表),然后在闭包内部修改列表中的元素。

  示例:

  def outer_func():

  x=[10]

  def inner_func():

  x[0]+=1

  print(x[0])

  return inner_func

  closure=outer_func()

  closure()#输出11

  closure()#输出12

  在上面的示例中,将外部变量x封装成了一个列表,然后在闭包内部通过修改列表的元素来修改外部变量的值。

  无论是使用nonlocal关键字还是封装成可变对象,都可以实现在闭包内部修改外部变量的值。具体选择哪种方式取决于外部变量的类型和使用场景。

Python进阶如何修改闭包内使用的外部变量?.png