zoukankan      html  css  js  c++  java
  • python基础学习-函数对象与函数嵌套

    一:函数对象

    精髓:可以把函数当成变量去用

    1.1 可以赋值

    # func=内存地址
    def func():
        print('from func')
    
    f=func              # 函数func赋值给变量f
    print(f,func)       # 打印f和func的内存地址,完全相同
    f()                 # 相当于调用了函数func()
    
    输出:
    <function func at 0x02F434A8> <function func at 0x02F434A8>
    from func
    1.2 可以当做函数当做参数传给另外一个函数
    
    def func():
        print('from func')
    
    def foo(x):     # x = func的内存地址
        print(x)    # 打印func的内存地址,完全相同
        x()         # 相当于调用了函数func()
    
    foo(func) # foo(func的内存地址)
    
    输出:
    <function func at 0x02F434F0>
    from func
    1.3 可以当做函数当做另外一个函数的返回值
    
    def func():
        print('from func')
        
    def foo(x):     # x=func的内存地址
        return x    # return func的内存地址
    
    res=foo(func)   # foo(func的内存地址)
    print(res)      # res=func的内存地址
    res()           # 相当于调用了函数func()
    
    输出:
    <function func at 0x02FB34F0>
    from func 

    1.4 可以当做容器类型的一个元素

    def func():
        print('from func')
        
    l=[func,]               # 把func当作列表的一个元素
    print(l)                # 输出列表l
    l[0]()                  # l[0]=func,l[0]()相当于调用了函数func()
    dic={'k1':func}         # 把func当作字典dic第一个key'k1'的值
    print(dic)              # 输出字典dic
    dic['k1']()             # dic['k1']=func,dic['k1']()相当于调用了函数func()
    
    输出:
    [<function func at 0x02CC34A8>]
    from func
    {'k1': <function func at 0x02CC34A8>}
    from func 

    案例:

    def exit():
        break
        
    def login():
        print('登录功能')
    
    def transfer():
        print('转账功能')
    
    def check_banlance():
        print('查询余额')
        
    def withdraw():
        print('提现')
    
    def register():
        print('注册')
    
    func_dic={
        '1':login,
        '2':transfer,
        '3':check_banlance,
        '4':withdraw,
        '5':register
    }
    
    while True:
        print("""
        0 退出
        1 登录
        2 转账
        3 查询余额
        4 提现
        5 注册
        """)
        choice = input('请输入命令编号:').strip()
        if not choice.isdigit():
            print('必须输入编号,傻叉')
            continue
    
        if choice == '0':
            break
    
    
        if choice in func_dic:
            func_dic[choice]()
        else:
            print('输入的指令不存在')
    
        # if choice == '1':
        #     login()
        # elif choice == '2':
        #     transfer()
        # elif choice == '3':
        #     check_banlance()
        # elif choice == '4':
        #     withdraw()
        # else:
        #     print('输入的指令不存在') 

    简化后:

    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]
    }
    
    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
        if choice in func_dic:
            func_dic[choice][1]()
        else:
            print('输入的指令不存在'

    二:函数嵌套

    2.1 函数的嵌套调用:在调用一个函数的过程中又调用其他函数

    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    
    def max4(a,b,c,d):
        res1=max2(a,b)          # 第一步:比较a,b得到res1
        res2=max2(res1,c)       # 第二步:比较res1,c得到res2
        res3=max2(res2,d)       # 第三步:比较res2,d得到res3
        return res3
    res=max4(1,2,3,4)
    print(res)
    
    输出:

    2.2 函数的嵌套定义:在函数内定义其他函数

    def f1():
        def f2():
            pass 

    案例:计算圆形周长与面积

    # 圆形
    # 求圆形的求周长: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)
    
    circle(33,action=0)
  • 相关阅读:
    deeplearning.ai 卷积神经网络 Week 1 卷积神经网络
    deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II
    deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I
    deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch Normalization和程序框架
    deeplearning.ai 改善深层神经网络 week2 优化算法
    deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面
    cs231n spring 2017 lecture8 Deep Learning Networks
    cs231n spring 2017 lecture7 Training Neural Networks II
    cs231n spring 2017 lecture6 Training Neural Networks I
    cs231n spring 2017 Python/Numpy基础
  • 原文地址:https://www.cnblogs.com/dingbei/p/12535147.html
Copyright © 2011-2022 走看看