函数的返回值在被其他函数

时间:2017-09-08 01:19:02

标签: python-3.x python-decorators

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.

1 个答案:

答案 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