• day11/函数对象/函数对象的应用/函数嵌套/名称空间/作用域


    pipe3 install request
    
    函数是第一类对象的含义是函数可以被当作数据处理
    1.引用
    2.当参数传给一个函数
    3.可以当作函数的返回值
    4.可以当作容器类型的元素

    def pay():
        print('支付。。。')
    
    def withdraw():
        print('取款。。。')
    
    def transfer():
        print('转账。。。')
    
    def check_balance():
        print('查看余额。。。')
    
    
    def shopping():
        print('购物。。。')
    
    func_dic={
        '1':pay,
        '2':withdraw,
        '3':transfer,
        '4':check_balance,
        '6':shopping
    }
    
    while True:
        msg="""
        1 支付
        2 取款
        3 转账
        4 查看余额
        5 退出
        6 购物
        """
        print(msg)
        choice=input('>>: ').strip()
        if choice == '5':break
        if choice not in func_dic:
            print('输入的指令不存在傻叉')
            continue
        func_dic[choice]()
    
    #函数的嵌套定义
    def f1():
        def f2():
            print('from f2')
        f2()
    f1()
    

     函数嵌套的应用

    from math import pi
    
    def circle(radius,action='area'): #radius=10
        def area():
            return pi * (radius ** 2)
    
        def perimeter():
            return 2 * pi * radius
    
        if action == 'area':
            return area()
        elif action == 'perimeter':
            return perimeter()
    circle(10)
    print(circle(10))
    print(circle(10,action='perimeter'))
    函数的嵌套调用
    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    
    def max4(a,b,c,d):
        res1=max2(a,b)
        res2=max2(res1,c)
        res3=max2(res2,d)
        return res3
    
    print(max4(1,2,3,4))

    当作容器
    def func(): #<function func at 0x00000000001F2E18>
        print('from func')
    
    print(func)
    def foo(func):#<function func at 0x00000000001F2E18>
        print(func)
    
    foo(func)
    

      


    名称空间与作用域 LEGB 其中E指的是非内置非全局以及非局部名称空间的部分
    1.名称空间namespaces
     存放名字与值绑定关系的地方
    2、名称空间分为三大类
    内置名称空间
    作用:存放python解释器自带的名字
    生命周期
    在解释器启动启动时生效,解释器关闭时失效
      
    全局名称空间:
    作用:除了内置的与局部的名字外,其余都是全局名字
    生命周期
    在文件执行时生效,在文件执行完毕时失效
        
    例如:x,func,y,l,z都是
                x=1
                def func():
                    a=1
    
                y=2
                l=[1,2]
    
                if 3 > 2:
                    if
                        if
                            if
                                z=3#会立马执行
    局部名称空间:
    作用:用于存放函数调用期间函数体产生的名字
    生命周期:
    在文件执行过程
    如果调用了某个函数才会临时生效,在函数执行完毕后失效

    三种名称空间的加载顺序是:
    内置-》全局-》局部

    名称空间就是用来存放名字与值的绑定关系的,所以但凡要查找名字
    一定是从三者之一找到,查找顺序:
    从当前所在的位置倒着查找,如果当前所在的位置是局部名称空间,
    则查找顺序是:
    局部-》全局-》内置

    作用域
    作用域:
    域指的是区域、范围,作用域即作用的范围
    全局作用范围,全局作用域(内置名称空间与全局名称空间)
    全局有效,全局存活
    def f1():
        def f2():
            def f3():
                print(len)
            f3()
        f2()
    f1()
    
    局部作用范围,局部作用域(局部名称空间)
    局部有效,临时存活
    作用域关系是在函数定义阶段就固定死了,与函数的调用位置无关
    x=1
    def f1():
        print(x)
    
    def f2():
        # print(f1)
        x=11111111111111111111111111111
        f1()
    
    f2()
    
    最终得到1再次印证了作用域关系在函数定义阶段就固定死了,与函数的调用位置无关
    
    函数对象+作用域:******
    def f1():
        x=1
        def inner():
            print('from inner',x)
        return inner
    
    f=f1()
    
    # print(f)
    
    def bar():
        x=111111111111111111111111111111111111111111111
        f()
    
    bar()
    
    =============================
    from inner 1
    

    globa的使用,明确改全局作用域

    x=1
    def foo():
        x=2
    foo()
    print(x)   #这种情况下x=1
    
    x=1
    def foo():
        global x   #声明我虽然在foo内,但是我要操作x不是我自己的x我要操作的是全局的
        x=2
    
    foo()
    print(x)   #这种情况下x=2
    

     nonlocal 了解知识点

    在局部如果想要修改全局的可变类型,不需要借助任何声明,可以直接修改
    在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量就可以直接修改了

    x=[]
    def f1():
        x.append(1)
    f1()
    f1()
    print(x)
    

      

    
    
  • 相关阅读:
    可视化工具Navicat 视图 事物 存储过程
    mysql用户管理 + pymysql的使用
    0914 表与表之间的关系补充一对一关系 记录操作 关键字 多对多 子查询
    0913数据库约束之主键 外键 非空 默认值约束 唯一约束 级联操作 表与表之间的联系
    数据库的数据类型
    面向对象之继承
    面向对象
    re模块
    加密常用模块
    日志模块
  • 原文地址:https://www.cnblogs.com/wangmiaolu/p/9155104.html
Copyright © 2020-2023  润新知