函数对象
可以将函数当成变量去用
1、可以赋值
def func():
x = 10
print(x)
f = func # 将func 的内存地址赋值给f
f() # 此时f()相当于func()
2、函数可以当作参数传给另外一个函数
def foo():
print(‘from foo‘)
def func(f):
f() # 运行传入的参数
func(foo) # 输出结果为 from foo
3、函数可以当作函数的返回值
def foo():
print(‘from foo‘)
def func():
return f
res = func(foo)
print(res) # foo的内存地址
res() # 加括号即可运行
4、函数可以当作容器类型的元素
def foo():
print(‘from foo‘)
l = [foo]
print(l)
l[0]() # 即可运行
‘‘‘利用函数可以作为容器就可以方便起来====简易的购物车模版‘‘‘
def login():
print(‘登陆功能‘)
def register():
print(‘注册功能‘)
def check_blance()
print(‘查看余额‘)
dic = {
‘1‘:‘登陆‘,login
‘2‘:‘注册‘,register
‘3‘:‘余额‘,check_blance
}
while ture:
print(‘0‘ ‘退出‘)
for i in dic:
print(‘%s %S‘ %(i,dic[i][0]))
choice = input(‘请输入功能编号>>>‘).strip()
if choice == 0:
break
elif choice in dic:
dic[chioce][1]
else:
print(‘输入指令错误,请重新输入‘)
函数嵌套
1、函数嵌套调用
在调用函数的过程中又调用其他函数
def max1(x,y): # 比较两个数大小
if x > y:
return x
else:
return y
def max2(a,b,c,d) # 比较四个数的大小
res1 = max1(a,b) # 比较a,b得到res1
res2 = max1(res1,c)
res3 = max1(res2,d)
return
max2(1,2,3,4)
可以将一些需要调用的小功能函数重新利用
2、函数的嵌套定义
在函数内定义其他函数
# 圆形
# 求圆形的求周长:2*pi*radius
def circle(radius,action=0):
from math import pi
def perimiter(radius):
return 2*pi*radius
# 求圆形的求面积:pi*(radius**2)
def area(radius):
return pi*(radius**2)
if action == 0:
return 2*pi*radius
elif action == 1:
return area(radius)
res=circle(33,action=0)
print(res)
一个集合中包含其他功能 传参选择调用
闭包函数
大前提:
闭包函数 = 名称空间与作用域+函数嵌套+函数对象
核心点:名字的查找关系是以函数定义阶段为准的
一、什么是闭包函数
‘闭’函数指的是该函数是内嵌函数
‘包’函数指的是该函数包含对外层函数作用域名字的引用(不是对全局作用域)
def f1():
x = 321
def f2():
print(x) # 此时f2内没有x,会向enclosing查找
f2()
二、为何要有闭包函数
掌握了另一种为函数体传参的方式
def outter(x):
# x = 111
def wrapper():
print(x)
return wrapper
wrapper = outter(111)
wrapper()