Python--12 内嵌函数和闭包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python--12 内嵌函数和闭包相关的知识,希望对你有一定的参考价值。

内嵌函数/内部函数

  >>> def fun1():
  ... print(‘fun1()正在调用‘)
  ... def fun2():
  ... print(‘fun2()正在被调用‘)
  ... fun2()
  ...
  >>> fun1()
  fun1()正在调用
  fun2()正在被调用

内部函数作用域在外部函数之内

  >>> fun2()
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  NameError: name ‘fun2‘ is not defined

闭包 closure

 闭包函数式编程的一种重要语法结构  

 函数式编程是一种编程范式,对代码进行抽象提炼和概括,使代码重用性变高

 python闭包在表现形式表现为 如果在一个内部函数里对外部作用域(但不是全局作用域)的变量进行引用,内部函数就被认为是闭包 

  >>> def FunX(x):
  ... def FunY(y):
  ... return x * y
  ... return FunY
  ...
  >>> i = FunX(8)
  >>> i
  <function FunX.<locals>.FunY at 0x7f5f41b05b70>
  >>> type(i)
  <class ‘function‘>
  >>> i(5)
  40
  >>> FunX(8)(5)
  40
  >>> FunY(5)
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  NameError: name ‘FunY‘ is not defined

 

 

  >>> def Fun1():
  ... x=5
  ... def Fun2():
  ... x *= x
  ... return x
  ... return Fun2()
  ...
  >>> Fun1()
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in Fun1
  File "<stdin>", line 4, in Fun2
  UnboundLocalError: local variable ‘x‘ referenced before assignment

 列表没有存放在栈里

  >>> def Fun1():
  ... x = [5]
  ... def Fun2():
  ... x[0] *= x[0]
  ... return x[0]
  ... return Fun2()
  ...
  >>> Fun1()
  25

nonlocal 关键字

  >>> def Fun1():
  ... x=5
  ... def Fun2():
  ... nonlocal x
  ... x *= x
  ... return x
  ... return Fun2()
  ...
  >>> Fun1()
  25

 


























































以上是关于Python--12 内嵌函数和闭包的主要内容,如果未能解决你的问题,请参考以下文章

内嵌函数和闭包

课时20:内嵌函数和闭包

GCC手册解析——内嵌函数(非闭包函数)

GCC手册解析——内嵌函数(非闭包函数)

Python自学之函数内嵌和闭包

Python 学习笔记 -- 内嵌函数闭包匿名函数高阶函数map高阶函数filter高阶函数reduce