zoukankan      html  css  js  c++  java
  • 函数

    1.函数对象

      在面向对象编程中,一切皆对象

      具体体现:1.函数可以引用  2.函数可以作为函数的参数  3.函数可以作为函数的返回值 4.函数可以被存入到容器类型中

    2.函数嵌套

      1.嵌套调用:在一个函数中调用另外一个函数

      2.嵌套定义:在一个函数中定义另外一个函数[定义在函数内的函数只能在函数内使用,不能被外界访问]

    3.名称空间
        存储名称的空间
        存储名字与内存地址关联关系的空间
        名称空间分类:
            内置名称空间:存储解释器自带的名称与值的对应关系(python解释器启动创建时创建,所有代码执行完毕关闭解释器时销毁)
            全局名称空间:只要名字的定义是顶着最左边,就在全局空间(执行py文件创建全局名称空间 所有代码执行完毕)

                      除了内置的和函数内的都在全局中
                      文件级别的名称会存储在全局名称空间
            局部名称空间:只要是函数里的名称就是局部的
                (调用函数时候创建 函数执行完毕之后销毁)
                
            名称空间的加载顺序
            内置的 -> 全局的 -> 局部的
            名称空间的查找顺序
            局部的 -> 全局的 -> 内置的

    4.作用域(作用范围)
         域 指的是区域 范围的意思
         全局名称空间和内置名称空间在使用上没什么区别
         局部的和全局的,内置的有区别
            局部定义只能在局部使用
        三个空间划分范围:
            全局的和内置的 可以划分为同一个范围
            global(表示全局范围,就是所谓的全局作用域)
            局部的单独为一个范围
            local 局部作用域
        
            globals 查看全局作用域中的内容
                _builtins_
            locals  查看局部作用域中的内容(在全局作用域使用locals就是全局作用域的内容globals)

            global 关键字:明确声明使用全局中的参数
            
            nonlocal 明确声明使用外上一层中的参数 如果上一层没有则找上上层的,不能找到全局中的

    5.闭包函数
        闭包函数也是一个函数
        与普通函数的区别:
                1.定义在另一个函数中的函数
                2.在这个内部函数中访问了外部的名称(数据)[不包含全局的数据]
        函数的作用域在定义的时候已经固定,与调用的位置没有关系    
        在返回这个内部函数时,不是单纯的返回函数,还将函数中访问到的局部名称一起打包了
        相当于将内部函数与访问的数据打包在一起.
        闭包函数的模板:
        def func2():
            a = 1
            def inner():
                print(a)
            return inner
        f = func2()
        print(f._closure_[0].cell_contents)
        print(f._closure_[1].cell_contents)
        访问闭包时,打包的函数

    6.装饰器
        什么是装饰器? 本质上就是一个工具
            什么是装饰? 给一个已有的对象(函数)加上新功能
            为什么要装饰?  增强功能
            器 指一个工具,在python中指的是具备某个功能的函数
            装饰器就是一个用于给其他函数增加新功能的函数
        print(time.time()) #返回一个时间戳,是从1970年1月1日(unix元年)到现在一共经过多少秒
        
        装饰器和闭包函数的关系:
            装饰器是一种设计代码的套路:不修改源代码的和调用方式的情况下,增加新功能
            要完成装饰器就要用闭包函数

    装饰器实例:

    import time


    def upload():
    print('开始上传')
    time.sleep(2)
    print('上传成功')


    def download():
    print('开始下载')
    time.sleep(2)
    print('下载成功')


    def auter(func):
    def inner():
    start_time = time.time()
    func()
    end_time = time.time()
    print(end_time - start_time)

    return inner


    download = auter(download)
    upload = auter(upload)
    download()
    upload()
    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    [f]动态判断js加载完成
    [f]添加css3动画的方法
    Meta标签以及viewport
    数据结构与算法-单向链表
    Denormalization 2
    Normalization
    Denormalization
    C# 通过反射获取扩展方法
    从ord()中对Unicode编码的理解
    python访问MS SqlServer(通过pyodbc)
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10034431.html
Copyright © 2011-2022 走看看