美文网首页
闭包函数和装饰器python

闭包函数和装饰器python

作者: 一言不合就跑步 | 来源:发表于2019-06-06 14:54 被阅读0次

    1.什么是闭包

    闭包是函数的内部函数,对外部作用域而非全局作用域的引用。可以打破层级关系,把外部的变量封装到内部函数中使用,直接在外面调用。

    x = 10
    def f1(x): 
        def f2():
            print(x)
        return f2 # 把f2函数当做一个返回值返回给f1.
    f2 =f1(1) # f1()就相当于把f2的值拿到,然后在赋值给一个变量名为f2。
    f2()
    

    2.函数的两种传参方式

    def f(x):
        print(x)
    
    def outter(func):
        def warpper(*args,**kwargs):
            return func()
        return warpper
    
    f = outer(func)
    f()
    

    闭包的意义

    返回的函数对象,不仅仅是函数结果,还包含了外面一层函数。这使得函数无论如何调用,优先调用外面一层参数。
    应用领域:爬虫等

    import requests
    
    def outter(url):  #outter() == spider ;spider() == response == requests.get(url)
        def spider():  # spider() == response
            response = requests.get(url)
            print(response.status_code)
            return response  
        return spider
    
    baidu = outter('https://www.baidu.com')  # baidu == spider
    baidu()
    

    装饰器

    什么是装饰器

    装饰器也是一个函数,可以将原函数已闭包的形式传入新的函数中,达到不修改原函数而增加新功能的效果。

    装饰器的功能:

    不修改原函数
    不修改原函数的调用方式

    def deco(func):
        def wrapper(*args,**kwargs):
            start = time.time()
            res = func(*args,**kwargs)
            end = time.time()
            print(end - start)
            return res
        return wrapper
    
    @deco
    def time_sleep(x):
        time.sleep(x)
        print('from time_sleep',x)
    
    
    
    time_sleep(3)
    

    相关文章

      网友评论

          本文标题:闭包函数和装饰器python

          本文链接:https://www.haomeiwen.com/subject/wdsyxctx.html