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()
    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    netbeans 打开项目时没有出现咖啡哪个标记
    java swing客户端程序调试的一些方式
    java客户端布局 GroupLayout 控件、按钮等布局
    ActiveMQ 增加消息 消费消息
    HBase学习解析之起源.md
    Hadoop学习解析之资源管理调度框架YARN
    Hive学习解析之工作原理.md
    Hive学习解析之系统架构.md
    js实现ajax获取的文件base64字符串处理.md
    springboot2.x整合quartz2.x.md
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10034431.html
Copyright © 2011-2022 走看看