Python 闭包

Python 闭包

在这一章中,我们将讨论Python中闭包的概念。在Python中,函数被称为一阶对象。就像主要的数据类型一样,函数也可以被赋值给变量,或者作为参数传递。

嵌套函数

您还可以在一个函数的体内定义一个函数,这称为嵌套函数。

示例

def functionA():
   print ("Outer function")
   def functionB():
      print ("Inner function")
   functionB()

functionA()

它将产生以下 输出

Outer function
Inner function

在上面的示例中,functionB被定义在functionA内部。然后从外部函数的作用域内调用内部函数。

如果外部函数接收到任何参数,它可以传递给内部函数。

def functionA(name):
   print ("Outer function")
   def functionB():
      print ("Inner function")
      print ("Hi {}".format(name))
   functionB()

functionA("Python")

它将会产生以下输出 −

Outer function
Inner function
Hi Python

什么是闭包

闭包是一个嵌套函数,它可以访问已经执行完毕的封闭函数中的变量。这样的变量在本地作用域中未绑定。如果要使用不可变的变量(数字或字符串),我们必须使用nonlocal关键字。

Python闭包的主要优点是可以避免使用全局值,并提供一定形式的数据隐藏。它们在Python装饰器中使用。

示例

def functionA(name):
   name ="New name"
   def functionB():
      print (name)
   return functionB

myfunction = functionA("My name")
myfunction()

它将产生以下 输出

New name

在上面的示例中,我们有一个函数A函数,它创建并返回另一个函数函数B。嵌套的函数B函数就是闭包。

外部函数A函数返回一个函数B函数并将其赋值给myfunction变量。即使它已经执行完毕,但是闭包仍然可以访问name变量。

nonlocal关键字

在Python中,nonlocal关键字允许访问局部作用域之外的变量。这在闭包中用于修改外部变量作用域中的不可变变量。

示例

def functionA():
   counter =0
   def functionB():
      nonlocal counter
      counter+=1
      return counter
   return functionB

myfunction = functionA()

retval = myfunction()
print ("Counter:", retval)

retval = myfunction()
print ("Counter:", retval)

retval = myfunction()
print ("Counter:", retval)

它将产生以下 输出

Counter: 1
Counter: 2
Counter: 3

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程