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

  

posted @ 2020-03-22 22:16  TopJocker  阅读(149)  评论(0编辑  收藏  举报