标签:延迟 模板 内部函数 爬虫 int import 方式 全局 def
闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量引用)
闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。
两种为函数传参的方式
为函数传参的方式一:使用参数的形式
def func(x):
print(x)
func(1)
func(1)
func(1)
为函数传参的方式二:包给函数
def outter(x):
x = 1
def inner():
print(x)
return inner
f = outter(1)
f()
f()
f()
# 查看闭包的元素
print(F"f.__closure__[0].cell_contents: {f.__closure__[0].cell_contents}")
闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域。
应用领域:延迟计算(原来我们是传参,现在我们是包起来)、爬虫领域。
器指的是工具,而程序中的函数就是具备某一功能的工具,所以装饰器指的是为被装饰器对象添加额外功能。因此定义装饰器就是定义一个函数,只不过该函数的功能是用来为其他函数添加额外的功能。
要注意的是:
对原来的功能进行扩展另外功能但使其源代码不变
装饰器的实现必须遵循两大原则:
import time
def index():
print('welcome to index')
tinme.sleep(1)
def time_count(func):
star=time.time()
func()
end=time.time()
print(f'{func} time is {start-end}')
time_count(index)
import time
def index():
print('welcome to index')
time.sleep(1)
def time_count(func)
def wrapper():
star = time.time()
func()
end = time.time()
return wrapper
index = time_count(index)
index()
上述的装饰器,最后调用index()的时候,其实是在调用wrapper(),因此如果原始的index()有返回值的时候,wrapper()函数的返回值应该和index()的返回值相同,也就是说,我们需要同步原始的index()和wrapper()方法的返回值。
import time
def index():
print('welcome to index')
time.sleep(1)
return 123
def time_count(func):
# func = 最原始的index
def wrapper():
start = time.time()
res = func()
end = time.time()
print(f"{func} time is {start-end}")
return res
return wrapper
index = time_count(index)
res = index()
print(f"res: {res}")
在被装饰函数正上方,并且是单独一行写上@装饰器名
装饰器模板
def deco(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
return res
return wrapper
标签:延迟 模板 内部函数 爬虫 int import 方式 全局 def
原文地址:https://www.cnblogs.com/hj59988326/p/11575012.html