def myfunc():
print(" myfunc() called.")
return 'ok'
'ok'是函数的返回值。
>>> myfunc()
myfunc() called.
'ok'
现在用其他功能装饰它。 装饰功能。
def deco(func):
def _deco():
print("before myfunc() called.")
func()
print(" after myfunc() called.")
return _deco
用deco函数装饰myfunc。
@deco
def myfunc():
print(" myfunc() called.")
return 'ok'
>>> myfunc()
before myfunc() called.
myfunc() called.
after myfunc() called.
为什么结果不如下?
>>> myfunc()
before myfunc() called.
myfunc() called.
'ok'
after myfunc() called.
答案 0 :(得分:1)
如果在shell中调用未修饰的myfunc
函数,它会自动打印返回的值。装饰后,myfunc
设置为_deco
函数,该函数仅隐式返回None
并且不打印返回的myfunc
值,因此'ok'
不会不再出现在shell中了。
如果您要打印'ok'
,则必须在_deco
函数中执行此操作:
def deco(func):
def _deco():
print("before myfunc() called.")
returned_value = func()
print(returned_value)
print(" after myfunc() called.")
return _deco
如果您想要返回值,则必须从_deco
返回
def deco(func):
def _deco():
print("before myfunc() called.")
returned_value = func()
print(" after myfunc() called.")
return returned_value
return _deco