闭包函数和装饰器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)