新西兰服务器

Python函数系列之嵌套及闭包(二)


Python函数系列之嵌套及闭包(二)

发布时间:2020-06-27 09:55:03 来源:网络 阅读:491 作者:zjdevops 栏目:编程语言
  • 函数的嵌套

在Python编程语言中,在函数体内创建另外一个函数(对象,因为Python一切皆对象,函数其实也是对象)是完全合法的,这种函数叫做内部/嵌套函数。

例子:

# coding : utf-8 def outer():     def inner():         print("is Inner Method")     print("Is outer Method")     inner()  #调用outer函数 outer() #调用outer()的内部函数,报错 # inner()

运行结果:

Is outer Method
is Inner Method

    inner()   #调用inner()时,出现如下错误
NameError: name ‘inner’ is not defined

  • 函数的闭包

何为闭包?

 如果在一个内部函数里,对在外部作用域(不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)

 说的明了一点就是:在内部函数中,引用了外部函数的自由变量

闭包的作用:

  • 保存函数的状体信息,使函数的局部变量信息可以保存下来,对于安装计算、隐藏状态是很有用的

  • 在GUI或者在很多API支持回调函数的事件驱动编程中也有很用处

闭包有两种调用方式:

  1. 在内部直接调用

  2. 返回函数名称

e.g

 1.在内部直接调用

# -*- coding: utf-8 -*-  def outer(name):     def inner(name):         # name = "Mr.Zhang"  #这里的name值会覆盖调用outer函数实参的值,这是涉及变量在函数作用域的范围         print("sub method :%s" %name)         # 使用__closuer__内置属性来判断是否是一个闭包,返回地址,则是,返回None,则不是闭包函数         print(inner.__closure__)     inner(name)  #在内部直接调用 outer("GuiDo")

运行结果:

sub method :GuiDo
(<cell at 0x000001D2792EF7C8: function object at 0x000001D2793687B8>,)

e.g

2.返回函数名称

# -*- coding: utf-8 -*-  def sumer(num = 0):     count = [num]     def add():         count[0] += 1         return count[0]     return add  f  = sumer(3) print(f()) print(f()) print(f())

运行结果:

4
5
6

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[