day12-闭包函数、装饰器
闭包函数
返回闭包函数内部函数的函数
import requests
def func1(url): #闭包函数
def spider():
responce = requests.get(url)
print(url)
return spider #函数对象
taobao = func1('www.taobao.com')
baidu = func1('www.baidu.com')
taobao()
baidu()
闭包函数:闭包函数把 闭包函数内部的变量 + 闭包函数内部的函数 这两者包裹在一起 然后通过返回值的形式返回出来
装饰器
装饰器的本质是一个给函数增加功能的函数
给函数增加功能的函数,注意:
1、不改变原函数的源代码
2、不改变原函数的调用方式
def func2():
return
def func1(func2): #装饰器模板
'''装饰器'''
def wrapper(*args, **kwargs):
res = func2(*args, **kwargs)
return res
return wrapper
func2 = func1(func2) #func2 = wrapper
装饰器语法糖
在被装饰函数正上方,并且是单独一行写上@装饰器名
user_session = ['ad']
def login():
print('欢迎带到登陆功能!')
return '土鳖'
def func1(func2):
'''装饰器'''
def wrapper(*args, **kwargs):
if not user_session:
res = login()
return res
res = func2(*args, **kwargs)
return res
return wrapper
@func1 #相当于 shopping = func1(shopping)
def shopping(name):
print('欢迎来到购物功能')
print(name)
return '真有钱'
@func1 #相当于 shopping_car = func1(shopping_car)
def shopping_car():
print('欢迎来到购物车功能')
return '肾都没了'
res = shopping('slk')
print(res)
res = shopping_car()
print(res)
三层装饰器
def fun(y = 1):
def fun1(fun2):
def wrapper(*args, **kwargs):
if y == 1:
res = fun2(*args, **kwargs)
return res
return 999
return wrapper
return fun1
@fun() #fun有默认参数也要加括号
def n(x):
if x > 10:
return '大于10'
else:
return '小于10'
res = n(66)
print(res)
迭代器
#可迭代对象:含有__iter__方法的就叫可迭代对象
#迭代器:含有__iter__和__next__方法的就叫迭代器
#生成器:含有yield关键字的函数就叫生成器
浙公网安备 33010602011771号