标签:闭包 函数 作用域 wrapper func print foo def
day23
函数对象
函数可以被赋值
def foo():
print('from foo')
def func(f):
f()
func(foo)
函数可以当做函数的返回值
函数可以当做容器的元素
# def foo():
# print(234567,1234,2345)
# l=[foo]
# l[0]()
# def login():
# print('登录'.center(50,'*'))
# def register():
# print('注册'.center(50,'*'))
# def withdraw():
# print('提现'.center(50,'*'))
# def transfer():
# print('转账'.center(50,'*'))
#
# func_dic={'1':['登录',login],
# '2':['注册',register],
# '3':['提现',withdraw],
# '4':['转账',transfer]}
#
# while True:
# print('0 退出')
# for i in func_dic:
# print ('%s %s'%(i,func_dic[i][0]))
# choice = input('输入编号:').strip()
# if choice == '0':
# break
# if choice in func_dic:
# func_dic[choice][1]()
# else:
# print('命令错误,请重新输入')
函数嵌套
函数的嵌套调用:在调用一个函数的过程中,该函数内部又调用了其它函数
def max2(x, y):
if x > y:
return x
else:
return y
def max4(a, b, c, d):
res1 = max2(a, b)
res2 = max2(res1, c)
res3 = max2(res2, d)
print(res3)
max4 (13123, 434252, 212141, 341414) #434252
名称空间与作用域
内置名称空间:放的是python自带的名字,print\len\input
生命周期:解释器启动则产生,解释器关闭则销毁
全局名称空间:放的是顶级名字
生命周期:运行python文件立即产生,python文件运行完毕则结束
局部名称空间:放的是函数内的名字
生命周期:调用函数则产生,函数调用完毕则销毁
结论: L E G B
名字的查找优先级 局部-全局-内置 基于自己当前所在位置向外查找 LEGB
giobal关键字
global关键字
# 在局部修改全局的名字对应的值(不可变类型)
# x=1
# def func():
# global x #global 修改不可变类型
# x=222
# func()
# print(x) #222
nonlocal关键字:声明一个名字是来自于外层函数,如果外层没有不会找到全局,会报错
x=1
def f1():
x=2 #若是没有x=2,会报错
def f2():
nonlocal x
x=3
f2()
print(x)
f1() #3
全局作用域:全局存活,全局有效
局部作用域:临时存活,局部有效
闭包函数
闭包函数=函数对象+函数嵌套定义+名称空间与作用域
闭函数:定义在函数内部的函数
包函数:内部函数引用了一个外层函数的名字
def foo():
x=111
def wrapper():
print(x)
return wrapper
f=foo()
print(f)
f() #111
闭包函数的作用:闭包函数是一种为函数体传参的方案
为函数体传参:
一:直接使用形参
def wrappera(x):
print(x)
wrapper(111)
wrapper(222)
wrapper(333)
二:闭包函数
def outter():
x=111
def wrapper():
print(x)
return wrapper
f=outter()
f()
def outter(x):
def wrapper():
print(x)
return wrapper
f=outter(111)
f()
标签:闭包,函数,作用域,wrapper,func,print,foo,def 来源: https://www.cnblogs.com/SSagittarius/p/14956151.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。