闭包函数和装饰器python

2019-06-06  本文已影响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)
上一篇下一篇

猜你喜欢

热点阅读