擅长:python、mysql、java
<p>您没有显式地调用<code>just_some_function()</code>,但是您的“decorator”调用了,参见最后一行:</p>
<pre><code>def my_decorator_module(some_function):
def wrapper():
num = 10
if num == 10:
print('yess')
else:
print('no')
some_function()
print('print after some_function() called')
# here !!!
return wrapper()
</code></pre>
<p>这实际上是一个错误的实现-您的装饰程序不应该返回调用<code>wrapper</code>的结果,而是返回<code>wrapper</code>函数本身:</p>
<pre><code> return wrapper
</code></pre>
<p>如果您不明白原因:<code>@decorator</code>语法只是语法糖,那么:</p>
<pre><code>@decorator
def somefunc():
print("somefunc")
</code></pre>
<p>实际上只是一个捷径:</p>
<pre><code>def somefunc():
print("somefunc")
somefunc = decorator(somefunc)
</code></pre>
<p>因此,您的decorator必须返回一个函数对象(或任何可调用的FWIW),通常-但不一定-一些包装器将负责调用修饰函数(最好返回结果)。你知道吗</p>