day16 笔记
1.函数对象:函数本质上与变量类似,因此可以将函数当做变量来用。
(1)可以赋值 f = func()
(2)可以当做函数参数传入 foo(func)
(3)可以把函数当做另一个函数的返回值 return func
(4)可以当做容器类型的一个元素 list = [func,1]
2.函数嵌套
1.嵌套调用:在调用一个函数过程中又调用其他函数
2.嵌套定义:在函数内定义其他函数
3.闭包函数:实质上就是空间+作用域+嵌套+对象的概念
什么是闭包函数?
闭指的是函数定义在另一个函数里面 内嵌函数
包指的是该函数对外层函数作用域名字的引用
为什么要有闭包函数?
传参方式:1.直接定义参数形成形参
2.形成闭包函数,在上层定义函数
函数对象应用示范:
# 案例:函数对象优化分支if
def login():
print('登录功能')
def transfer():
print('转账功能')
def check_banlance():
print('查询余额')
def withdraw():
print('提现')
def register():
print('注册')
func_dic = {
'0': ['退出', None],
'1': ['登录', login],
'2': ['转账', transfer],
'3': ['查询余额', check_banlance],
'4': ['提现', withdraw],
'5': ['注册', register]
}
# func_dic['1']()
while True:
for k in func_dic:
print(k, func_dic[k][0])
choice = input('请输入命令编号:').strip()
if not choice.isdigit():
print('必须输入编号,傻叉')
continue
if choice == '0':
break
# choice='1'
if choice in func_dic:
func_dic[choice][1]()
else:
print('输入的指令不存在')
传参的方案一:
# def get(url):
# response=requests.get(url)
# print(len(response.text))
#
# get('https://www.baidu.com')
# get('https://www.cnblogs.com/linhaifeng')
# get('https://zhuanlan.zhihu.com/p/109056932')
# 传参的方案二:
def outter(url):
# url='https://www.baidu.com'
def get():
response=requests.get(url)
print(len(response.text))
return get
baidu=outter('https://www.baidu.com')
baidu()
cnblogs=outter('https://www.cnblogs.com/linhaifeng')
cnblogs()
zhihu=outter('https://zhuanlan.zhihu.com/p/109056932')
zhihu()