python中返回函数和返回函数对象之间的区别是什么?

2024-10-03 17:18:17 发布

您现在位置:Python中文网/ 问答频道 /正文

def speak():
    def whisper():
        print('ased')
    return whisper()

speak()

在使用decorator时,我们所做的是返回函数对象,但在这里我们返回了函数(return whiler()),那么有人能解释一下返回函数和返回函数对象之间的区别吗


Tags: 对象函数returndefdecoratorprintspeak区别
3条回答

当您返回函数时,它将在创建新变量时执行print('ased')。但是如果返回对象,则可以执行将执行相同任务的变量

您正在编写一个内部有嵌套函数的函数。通常的意图是,你会有一些其他的代码在那里比你正在做的更有趣,但我意识到这只是一个玩具,让你尝试这个想法,所以我们可以忽略这一点

你真正的问题是回报。您的代码是:

def speak():
    def whisper():
        print('ased')
    return whisper()

speak()

return语句实际调用了whisper()函数,然后返回该函数调用的结果,因为whisper()不返回它刚刚打印的任何内容,所以返回结果是空的

因此,它基本上与您所写的内容相同:

def speak():
    return print('ased')

speak()

或者只是:

def speak():
    print('ased')

speak()

您可能打算省去()这样的return whisper,这样它就不会调用该函数,而是实际返回了对该函数的引用,该函数将被返回,并且以后可以被调用,如下所示:

def speak():
    def whisper():
        print('ased')
    return whisper

func = speak()
...
func()

它在调用speak时不会打印任何内容,但会返回一个函数引用,您可以保存该引用,然后稍后调用(在本例中为^{

上面不是装饰器的工作方式,但它确实使用了定义内部函数然后返回对该函数的引用的相同原理

return function对象返回函数,在Python中可以将其分配给另一个函数,该函数也成为可调用函数。可以调用新分配的函数来执行相同的任务

其中,与return函数一样,它返回值,并且只调用相同的函数来执行该函数。它不能被分配

相关问题 更多 >