首页 > 试题广场 >

执行以下程序,输出结果为() def outer(fn):

[单选题]

执行以下程序,输出结果为()

def outer(fn):

    print('outer')

    def inner():

        print('inner')

        return fn

    return inner

@outer

def fun():

    print('fun')

  • outer

  • inner

  • fun
  • 因为没有调用任何函数,所以没有输出结果
装饰器的一个关键特性是,它们在被装饰的函数定义之后立即运行
发表于 2021-12-11 05:15:51 回复(0)
这段代码看上去函数并没有被调用为什么会执行,其实这就是装饰器用法!!!
在fun()顶部写@outer    等同于将fun函数作为一个参数传入outer  写法如:    fun = outer(fun)
因此会执行print ('outer')输出一个outer
return inner没有(),所以不会输出inner

如果调用它
if __name__ == '__main__':
    fun()
输出结果将是
outer
inner
如果将return inner加上()再调用它
if __name__ == '__main__':
    fun()
结果将是
outer
inner
fun


编辑于 2022-09-29 17:23:48 回复(5)
?没有输出
发表于 2021-12-11 01:52:27 回复(0)
首先,由于fun = outer(fun)期间会调用outer函数,因此outer无论如何都会打印出来
其次,由于fun = outer(fun) = inner,且代码中没有没有调用fun函数,故内函数inner没有被调用所以不会打印inner
发表于 2022-03-27 23:59:35 回复(0)
inner加上()才会调用内部函数,这里没有加,所以只打印了outer
发表于 2022-03-10 11:40:19 回复(0)
装饰品相当于调用了外部函数,而内部函数以及装饰函数只是被定义,并没有调用,所以只直行外部函数,只有一个输出结果。
发表于 2022-03-23 09:09:19 回复(0)
inner() —函数运行的结果
inner --函数调用
  1. 函数装饰器在被装饰的函数定义之后立即运行。
  2. 被装饰的函数只在明确调用时运行。
  3. 装饰器返回的应该是函数调用func而不是函数的运行结果func(),这也就是函数加不加括号的区别。
 疑问:如果调用了inner,为什么却没有打印inner呢?之前刷过许多return 函数名没有加()也调用了函数的呀

编辑于 2022-05-24 14:19:01 回复(0)
@为装饰器用法
在fun()顶部写@outer    等同于将fun函数作为一个参数传入outer  写法如:    fun = outer(fun)
所以先执行print ('outer')
return inner没有()因此inner函数不执行
发表于 2022-05-13 12:02:37 回复(0)
输出:outer和inner
发表于 2022-01-27 12:23:05 回复(1)
这什么意思啊 执行下来输出outer 调用fun()又是outer和inner 看不懂啊
编辑于 2024-02-18 14:26:48 回复(0)
还是没太懂
发表于 2023-11-08 17:33:19 回复(0)
考察装饰器的使用

发表于 2022-05-22 17:11:34 回复(0)
函数装饰后,会解析成:fun=outer(fun);  打印 print('outer'), 返回内层函数 return inner
发表于 2022-02-10 21:20:19 回复(1)
不是inner
发表于 2021-12-11 07:49:59 回复(0)