Python之系列函数(二)
2019-07-13 19:02
1436 查看
函数的嵌套
在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
(<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
相关文章推荐
- Python+Django+SAE系列教程2-----Python种的函数、模块和数据结构
- python2.7系列下的print函数使用注意事项
- Python系列:四、Python函数--技术流ken
- Python学习系列----第四章 函数
- python—matplotlib数据可视化实例注解系列-----之函数图
- [Python 2 到 3 系列]print 是函数
- 【脚本语言系列】关于Python基础知识函数缓存,你需要知道的事
- Python连载系列之Python语法基础2:Python中的函数
- Python系列-python函数
- Python基础系列----函数,面向对象,异常
- python—matplotlib数据可视化实例注解系列-----之函数填充
- Python dictionary items()系列函数的使用
- 【Python 2 到 3 系列】 print 是函数
- python学习系列(五)--- 正则表达式基本函数
- 5分钟速学系列:Python入门基础函数和类(有视频教程)
- python学习系列之python装饰器基础(2)---装饰含返回值的函数
- python入门系列10:函数1
- Python学习系列六:函数的参数对应
- Python学习系列九:函数对象
- Python内置函数系列之数值相关函数