zoukankan      html  css  js  c++  java
  • python-study-12

    复习

    上节课复习
    函数嵌套
    函数的嵌套定义
    函数的嵌套调用
    函数对象
    可以将定义在函数内的函数返回到全局中使用,从而打破函数的层级限制
    名称空间与作用域
    LEGB
    作用域关系在函数定义阶段时就已经固定死了,与调用位置无关

    今日内容:
    1、闭包函数
    2、装饰器

    1闭包函数

    作用域关系在函数定义阶段时就已经固定死了,与调用位置无关
    即:在任意位置调用函数都需要跑到定义函数时寻找作用域关系

    闭包函数:
    闭指的是:该函数是一个内部函数
    包指的是:指的是该函数包含对外部作用域(非全局作用域)名字的引用

    为函数体传值的方式一:使用参数的形式
    为函数体传值的方式二:包给函数 #相比参数传值的方式可以一次赋值多次使用

    2装饰器

    1、什么是装饰器
    器指的是工具,而程序中的函数就具备某一功能的工具
    装饰指的是为被装饰器对象添加额外功能

    就目前的知识来看:
    定义装饰器就是定义一个函数,只不过该函数的功能是用来为
    其他函数添加额外的功能

    其实:
    装饰器本身其实可以是任意可调用的对象
    被装饰的对象也可以是任意可调用的对象


    2、为什么要用装饰器
    软件的维护应该遵循开放封闭原则
    开放封闭原则指的是:
    软件一旦上线运行后对修改源代码是封闭的,对扩展功能的是开放的
    这就用到了装饰器

    装饰器的实现必须遵循两大原则:
    1、不修改被装饰对象的源代码
    2、不修改被装饰对象的调用方式
    装饰器其实就在遵循1和2原则的前提下为被装饰对象添加新功能

    3、如何用装饰器
    装饰器语法糖
    在被装饰对象正上方,并且是单独一行写上@装饰器名
    
    装饰器实例:
    import time
    def timmer(func):
        #func=最原始的index
        def wrapper(*args,**kwargs):
            start=time.time()
            res=func(*args,**kwargs)
            stop=time.time()
            print('run time is %s' %(stop - start))
            return res
        return wrapper
    
    @timmer # index=timmer(index)
    def index():
        print('welcome to index')
        time.sleep(3)
        return 123
    
    @timmer # home=timmer(home)
    def home(name):
        print('welcome %s to home page' %name)
        time.sleep(2)
    
    res=index()
    home('egon')
    
    装饰器模板
    def deco(func):
        def wrapper(*args,**kwargs):
            res=func(*args,**kwargs)
            return res
        return wrapper
    @deco
    View Code
  • 相关阅读:
    python应用之文件属性浏览
    python进阶之路之文件处理
    magento安装时的数据库访问错误
    magento麦进斗客户地址属性不保存在sales_flat_order_address
    自动填写麦进斗Magento进货地址字段
    麦进斗magentoRequireJs回调失败
    如何在麦进斗magento2中调用站外的JS?
    在magento1.9结账地址中删除验证
    麦进斗:在windows系统里面刷新magento2的缓存
    如何安装麦进斗Magento2
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9168604.html
Copyright © 2011-2022 走看看