python:从入门到放弃 09 函数对象与闭包

函数对象

函数对象指的是函数可以被当做’数据’来处理,具体可以分为四个方面的使用

函数名可以当做变量名赋值

def bar():
	return add

func=bar()
func(1,2)
3

函数名还可以当成函数的实参

def foo(x,y,func):
	return func(x,y)

foo(1,2,add)
3

函数名还可以当做函数的返回值

def bar():
	return add

func=bar()
func(1,2)
3

函数名可以作为容器类型的元素

'''容器类型:内部可以存档多个元素的数据类型>>>:列表、元组、字典'''
def index():
	print('from index')
l1 = [11, 22, 33, 44, index]
print(l1)
l1[-1]()  # index()

闭包函数

闭包函数的特征:
1.闭:定义在函数内部的函数
2.包:内部函数使用了外层函数名称空间中的名字
    
def outer():
    x = 999
    def inner(): # 闭包函数
        print('from outer>>>inner',x)
    return inner
x = 666
res = outer()
res() # from outer>>>inner 999
'''闭包函数inner使用的是函数outer的局部名称空间的变量X,而非全局名称空间的变量X'''

闭包函数实际应用

目前为止,我们得到了两种为函数体传值的方式,一种是直接将值以参数的形式传入,另外一种就是将值包给函数

#方式一:
def index(username):
    print(username)

index('Rain') # 以参数的形式传入

#方式二:
def outer():
	username = 'Rain'
	def index():
		print(username) # 使用的是outer函数包给index函数的值
	return index
res = outer()
res() # Rain
posted @   Rain_Kz  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 前端实现 HTML 网页转 PDF 并导出
点击右上角即可分享
微信分享提示