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

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都网站建设、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的保德网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
在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 Methodinner() #调用inner()时,出现如下错误
NameError: name 'inner' is not defined
函数的闭包
何为闭包?
如果在一个内部函数里,对在外部作用域(不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)
说的明了一点就是:在内部函数中,引用了外部函数的自由变量
闭包的作用:
保存函数的状体信息,使函数的局部变量信息可以保存下来,对于安装计算、隐藏状态是很有用的
在GUI或者在很多API支持回调函数的事件驱动编程中也有很用处
闭包有两种调用方式:
在内部直接调用
返回函数名称
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
(,) |
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
分享文章:Python函数系列之嵌套及闭包(二)
分享路径:http://www.jxjierui.cn/article/igseip.html


咨询
建站咨询
