zoukankan      html  css  js  c++  java
  • 闭包函数和装饰器

    一、闭包函数

    定义:应该满足以下两个条件。

      1.定义在函数内部的函数

      2.内部函数引用了外部函数名称空间作用域的名字

    样式:

            def outer():
                y = 222
                def inner():
                    print(x,y)
                return inner

    # 函数在定义阶段名字的查找顺序已经固定死了,不会因为函数调用位置的变化而变化

    给函数传参的两种方式

    1.直接传参(函数名加参数)

    def index(username):
        print(username)

    2.闭包

    可以读取其他函数代码的内部 ,可以快速修改代码

    def outter(x,y):
        x = 1
        y=40
        def my_max():
            if x>y:
                return x
            return y
        return my_max
    res = outter(1,40)

    二  装饰器

      给被装饰对象添加新的功能的一个工具

    装饰器(可调用对象)必须遵循的两个原则

      不改变被装饰对象的源代码

      不改变被装饰对象的调用方式

    开放封闭原则

      开放:对扩展开放

      封闭:对修改封闭

    import time模块

    time.time  时间戳  距离1970年1-1 00:00:00相差的秒数

    time.sleep 让程序延续多少秒执行

    无参装饰器

        from functools import wraps
        def outter(func):
            @wraps(func)
            def inner(*args,**kwargs):  # * **在形参中使用
                # 执行被装饰函数之前你可以做的操作
                res = func(*args,**kwargs)  # * **在实参中使用
                # 执行被装饰函数之后你可以做到操作
                return res
            return inner
      @outter

    有参装饰器

    def wrappers(params1,params2,params3):
        def outter(func):
            @wraps(func)
            def inner(*args,**kwargs)
                print("执行被装饰函数之前 你可以做的操作")
                res = func(*args,**kwargs)
                print("执行被装饰函数之后 你可以做的操作")
                return res
            return inner
        return outter
    @wrappers(1,2,3)

      

  • 相关阅读:
    [转]简单理解php的socket编程
    github 生成token的方法
    win7升级powershell【转】
    PHP的反射机制 【转】
    jquery幻灯片插件slick演示
    织梦生成的时候“你指定的文件名有问题,无法创建文件”解决方案【转】
    dedecms下的tplcache模板缓存[转]
    dede织梦data目录正确迁移及引起的问题解决方法【转】
    C# 判断是否是在设计模式下有效的方法
    C# 操作计算机用户权限
  • 原文地址:https://www.cnblogs.com/panyi2019/p/11178195.html
Copyright © 2011-2022 走看看