• 闭包函数与装饰器


    一、闭包函数

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

    def outter():
    x = 1
    def inner():
    print(x)

    return inner

    f=outter()


    为函数传值的方式:
     为函数体传值的方式一:使用参数的形式
    def inner(x):
    print(x)



    为函数体传值的方式二:包给函数
    def outter(x):
    # x=1
    def inner():
    print(x)
    return inner

    f=outter(1)
    f()


    闭包函数的应用:
    import requests

    def outter(url):
    # url='https://www.baidu.com'
    def get():
    response=requests.get(url)
    if response.status_code == 200:
    print(response.text)
    return get

    baidu=outter('https://www.baidu.com')
    python=outter('https://www.python.org')
    二、装饰器(无参装饰器)
    1、什么是装饰器
    器指的是工具,而程序中的函数就具备某一功能的工具
    装饰指的是为被装饰器对象添加额外功能

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

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


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

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

    3、怎么用装饰器?
    import time

    def index():
    print('welcom to index')
    time.sleep(3)

    def timmer(func):
    #func=最原始的index
    def wrapper():
    start=time.time()
    func()
    stop=time.time()
    print('run time is %s' %(stop - start))
    return wrapper

    index=timmer(index) #index=wrapper函数的内存地址
    index()

    装饰器语法糖:
    在被装饰对象正上方,并且是单独一行写上@装饰器名

    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')


  • 相关阅读:
    软件工程课堂练习-最高折扣
    小组开发项目NABC分析
    《梦断代码》阅读笔记二
    软件工程课堂练习--结对开发
    软件工程课堂练习--结对开发
    结对开发四
    电梯调度需求分析
    软件工程课堂练习——结队开发二
    电梯调度——课堂练习
    团队项目开发——用户需求调研报告
  • 原文地址:https://www.cnblogs.com/kingyanan/p/9173258.html
Copyright © 2020-2023  润新知