<h3 id="装饰器的写法补充" data-source-line="125"><span style="font-size: 18pt;">装饰器的写法补充:
<p data-source-line="126">通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号。下面通过两个例子还看。
<h5 id="一般装饰器的写法" data-source-line="128"><span style="font-size: 14pt;">一般装饰器的写法:
<div class="cnblogs_code">
log(func= inner(*args,** ( res = func(*args,** ( ( my_func()
<p data-source-line="150">运行结果:
<div class="cnblogs_code">
do something after
<h5 id="可以不带括号的装饰器写法" data-source-line="157"><span style="font-size: 14pt;">可以不带括号的装饰器写法
<p data-source-line="158">需要增加判断在函数内,用于判断使用装饰器的函数是否可以调用,以达到括号的自由写法
<p data-source-line="160">判断的装饰器写法
<div class="cnblogs_code">
log(func= inner(*args,** ( res = fun(*args,** ( func ( ( my_func()
<p data-source-line="201">两种方式的一样,运行结果:
<div class="cnblogs_code">
1 do something before 2 i am my_func 3 do something after
<p data-source-line="196">不带括号的理解:
<p data-source-line="196">
<div class="cnblogs_code">
@log =>等同于 my_func = log(my_func)
带括号的理解:
@log() =>等同于 my_func = log()(my_func)
<p data-source-line="201">
<p data-source-line="207">结论: 内嵌之后,可以增加判断条件,增加了装饰器的灵活性。