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()