zoukankan      html  css  js  c++  java
  • day12_01闭包函数

    1、函数对象

    比如说定义一个对象

    def func():  #func = 内存地址

      pass

    print(func)  #结果<function func at 0x00000226A64DB160>

    func()  #函数名()是函数的调用

    func  #就是一个变量名

    2、函数的嵌套定义

    def outter():
        def warpper():
            pass
        pass

    3、名称空间与作用域

    名称空间两大点

    (1)名字的访问顺序:LEGB

    L:代表当前所在的位置,函数内所在的位置

    E:外层函数和全局之间的位置

    G:全局

    B:内置

    (2)名称空间的嵌套定义关系是函数定义阶段扫描语法生成的,与调用位置无关

    全局作用域:内置名称空间、全局名称空间

        特点:全局存活,全局有效

    局部作用域:局部名称空间

        特点:临时存活,局部有效

    global关键字:用在局部,修改全局的不可变类型的值

      ps:难道就不能修改可变类型的值吗?

      可变类型直接改就ok了。不用globa关键字

    废话少说,上号!

    案例1
    dic = {'username':None}
    
    def login():
      #dic = 123    #结果:开头是啥样,结果就啥样
        dic['username'] = 'likk'
    login()
    print(dic)    #结果{'username': None}
    案例2
    x = 100
    def login():
        global x
        x = 200
    login()
    peint(x)    #结果是200  你不信CTRL+V!!
    关键字nonlocal
    def f1():
        x = 100
        def f2():
            #global x    #结果:开始x等于多少,现在也等于多少 x=100
            nonlocal x
            x = 200
        f2()
        print(x)
    f1()

    两个案例的结果再一起发布一下,别再说我懒啦!

    案例1 {'username': None}
    案例2 200

    *与**

    *在形参中:会接收溢出的位置实参,然后将其存成元组,然后赋值给紧跟其后的变量名

    **在形参中:**会接收溢出的关键字实参,然后将其存成字典,然后赋值给紧跟其后的变量名

    *在实参中:*后跟的必须是一个可以被for循环遍历的类型,*会将实参打散成位置实参

    **在实参中:**后跟的必须是一个字典,**会将实参打散成关键字实参

    b话少说,上号!

    dic = {'x':1,'y':2,'k':'lik'}
    def index(*args,**kwargs):
        print(*args)
        print(**kwargs)
    
    def outter(*args,**kwargs):
        index(*args,**kwargs)
    outter((1,2,3,4,5),dic)

    结果

    (1, 2, 3, 4, 5) {'x': 1, 'y': 2, 'k': 'lik'}
  • 相关阅读:
    时间记录日志
    软件工程作业02
    个人学习进度(第二周)
    《大道至简》第二章读后感
    《大道至简》第一章读后感
    构建之法阅读笔记02
    构建之法阅读笔记01
    web开发
    Tomcat的安装与环境配置
    java-10异常处理动手动脑
  • 原文地址:https://www.cnblogs.com/HuaR-/p/14593667.html
Copyright © 2011-2022 走看看