python中函数嵌套,函数作为变量以及闭包的原理是什么

  介绍

这篇文章主要介绍”python中函数嵌套,函数作为变量以及闭包的原理是什么”,在日常操作中,相信很多人在python中函数嵌套,函数作为变量以及闭包的原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“python中函数嵌套,函数作为变量以及闭包的原理是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

<强>嵌套函数:

python允许创建嵌套函数。也就是说我们可以在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变。

<强>例子:

 #=utf - 8编码
  def 外():
  ,,,的名字=皃ython"
  
  ,,,def 内():#外函数内部定义的函数
  ,,,,,,,print 名字
  ,,,return 内()#返回该内部函数
  外()

<强>结果:

 python中函数嵌套,函数作为变量以及闭包的原理是什么

<强>理解:

在内部函数中,python解析器需要找一个叫名字的本地变量,查找失败后会继续在上层的作用域里面寻找,这个上层作用域定义在外函数里,python函数可以访问封闭作用域。

对于外函数中最后一句,返回内函数调用的结果,需要知道非常重要一点就是,内心也仅仅是一个遵循python变量解析规则的变量名,python解释器会优先在外围的作用域里面对变量名内查找匹配的变量。

把恰好是函数标识符的变量内作为返回值返回回来,每次函数外被调用的时候,函数内都会被重新定义,如果它不被当做变量返回的话,每次执行过后它将不复存在。

在python里,函数就是对象,它也只是一些普通的值而已。也就是说你可以把函数像参数一样传递给其他的函数或者说从函数了里面返回函数

<强>返回内层函数时不加括号,只返回函数的地址:

<强>代码:

 #=utf - 8编码
  def 外():
  ,,,的名字=皃ython"
  
  ,,,def 内():#外函数内部定义的函数
  ,,,,,,,return 名字
  ,,,return 内部#返回该内部函数
  print 外()

<>强,结果:

/> </p> <p>此时执行外层函数外(),返回的是内层函数的函数引用(函数名称),内心想要执行内层函数,需要在外部()后边再加个括号,即外()(),才会让内层函数执行</p> <p> <强>代码:</强> </p> <pre> #=utf - 8编码
  def 外():
  ,,,的名字=皃ython

<强>结果:

 python中函数嵌套,函数作为变量以及闭包的原理是什么

<强>函数作为变量:

<强>例子:

 #=utf - 8编码
  def 添加(x, y):
  ,,,return  x + y
  def 子(x, y):
  ,,,return  x - y
  def 应用(func (x, y):
  ,,,return  func (x, y)
  print “应用(添加2 1):“,应用(添加、2、1)
  print “应用(下标2 1):“,应用(下标2 1)

<强>结果:

<强> /> </强> </p> <p>申请函数准备接收一个函数的变量,它也只是一个普通的变量而已,和其他变量一样,然后我们调用传进来的函数:“()代表着调用的操作,并且调用变量包含的值”。</p> <p>在函数外,我们也能看到传递函数并没有什么特殊的语法,函数的名称只是和其他变量一样的表标识符而已。</p> <p> <强>闭包的理解:</强> </p> <p> <强>先看个例子</强> </p> <pre> #=utf - 8编码
  def 外():
  ,,,的名字=皃ython

<强>结果:

<强>  python中函数嵌套,函数作为变量以及闭包的原理是什么

例中,内部作为一个函数被外返回,保存在变量res中,并且还能够调用res()。为什么能调用呢?

通过上面变量的作用域和生存周期我们不难明白,名字是函数外里的一个局部变量,也就是说只有当外正在运行时,该变量才会存在。

根据python的运行模式,我们是没法在函数外执行退出之后还能继续调用内函数的,并且在内部函数被调用时,变量的名字早已不存在了,但是为什么我们调用成功了呢?

python中函数嵌套,函数作为变量以及闭包的原理是什么