闭包函数和装饰器

一、闭包函数

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

  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)

  

原文地址:https://www.cnblogs.com/panyi2019/p/11178195.html