python内置的装饰器最通俗的讲解_python 装饰器通俗讲解 duz

装饰器

什么是装饰器?:在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上

Python中的装饰器是你进入Python大门的一道坎;

装饰器特点:

不改变原函数原代码;

不改变原函数调用方式;

给原函数增添新的功能;

示例:

def deco(func):

def wrapper(*args,**kwargs):

print ("add new function")

func()

return wrapper

@deco #相当于func1=deco(func1)

def func1():

print('hello world')

讲解:

首先:了解函数func 与 func()的区别?

func为函数的内存id

内存id+()既可以运行函数--->func()

示例:

def func1():

print('hello world')

print(func1)

.....运行结果

其次:变动一下装饰器函数并分析他干了些什么

按代码运行顺序进行分析

#第一步:

def deco(func):

def wrapper():

print ("add new function")

func()

return wrapper

#第二步

def func1():

print('hello world')

#第三步

func2=deco(func1)

#第四步

func2()

第一步:定义deco函数

第二步:定义func1函数

第三步:

①调用deco函数并将func1()函数的内存id以实参传入deco函数

②deco 函数动作一:定义wrapper()函数,wrapper函数内容:

print ("add new function")

使用实参func1=func,即:func1()

注意:wrapper函数只定义,未运行;

③deco函数动作二:返回wrapper函数内存id

④将deco()函数的返回值传递给变量func2 即func2= 即func2=wrapper

第四步:func2()即wrapper()

print ("add new function")

func1()

最后,到了这里我们就大体了解了装饰器的工作原理了,我们再回看前面的装饰器就不难理解啦

其中:Python提供了可变参数*args和关键字参数**kwargs,有了这两个参数,装饰器就可以用于任意目标函数了。

拓展:带参数的装饰器

def default_engine(engine=None):

def auth(func):

def deco(*args, **kwargs):

user = input('user:')

password = input('password:')

if engine == 'mysql':

if user == 'root' and password == 'root':

res = func(*args, **kwargs)

return res

else:

print('用户名或密码错误')

else:

print('没有这个引擎')

return deco

return auth

@default_engine(engine='mysql')

def index():

print('welcome to home page')

# res = default_engine(engine='mysql')

# index = res(index)

index()

a989354ddb9ebe7dfcea8b97f84f3e62.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值