首页 > 解决方案 > Python - 返回一个函数对象是什么意思?

问题描述

我正在尝试了解 Python 中的装饰器。我已经从 SO 上的各种答案[ex]中了解了它们的用途:在修饰函数之前和/或之后运行代码而不修改函数本身。也就是说,我无法理解返回函数对象的含义。

返回函数的返回值和返回函数对象有什么区别?我知道返回了对函数本身的引用,但是这种行为的用处是什么?

我没有使用@Decorator下面的语法,因为我还在学习。

例如:

def some_func():
    print('returning 1')
    return 1
def Decorator(func):
    def Wrapper():
        print('doing something first')
        val = func()
        print('doing something after')
        return val
    return Wrapper
Decorated_func = Decorator(some_func)
Decorated_func()

在 PythonTutor 中逐步执行此操作:调用 Decorated_func() 显示Wrapper返回值为1并且Decorator返回值为Wrapper。这是否意味着Decorator 实际上有一个1何时Decorated_func()被调用的返回值?我原以为该行为的语法是 (within Decorator) return Wrapper()。返回函数对象有什么意义?

标签: pythonoopdecorator

解决方案


当你返回一个函数时,调用者可以使用不同的参数多次调用它,并且每次都可以计算出不同的结果。

如果你返回调用函数的结果,你只是返回一个值,它永远不会改变。而且由于它不是一个函数,你不能用不同的参数调用它。

这是一个更简单的例子:

def adder(x):
    def add_x(y):
        return x + y
    return add_x

add_1 = adder(1)
add_3 = adder(3)
print(add_1(10)) # prints 11
print(add_1(20)) # prints 21
print(add_3(10)) # prints 13

如果您将其更改为 then 之类的内容,return add_x(5)adder(1)只会返回6,而不是可以使用不同参数调用的函数。


推荐阅读