【自学python】 问关于函数改名字却无法执行的问题?

代码如下:

def w1(funC,funD):
    def inner():
        print("-----1-----")
        funC()
        funD()
    return inner

def f1():
    print("-----2-----")

def f2():
    print("-----3-----")

innerfunC = w1
innerfunC(f1,f2)

执行结果:

clipboard.png

我的问题:
我定义了w1这个函数,然后把w1 给innerfunC
然后我执行innerfunC 为什么结果什么都没有?
如果我把代码改成:

def w1(funC,funD):
    def inner():
        print("-----1-----")
        funC()
        funD()
    return inner

def f1():
    print("-----2-----")

def f2():
    print("-----3-----")

innerfunC = w1(f1,f2)
innerfunC()

则执行结果是:

clipboard.png

我的问题,为什么最开始的代码执行不起来呢? 我看着感觉没问题啊。

阅读 2.8k
2 个回答

第一种情况改为

innerfunC(f1,f2)()

就可以了.

加(),这相当于第二种情况的innerfunc().原因是第一种情况返回inner函数没有被调用.第二种情况返回的inner函数被调用了.

def w1(funC,funD):
    def inner():
        print("-----1-----")
        funC()
        funD()
    return inner

这个方法返回的是一个inner方法, 而你又没有执行它, 像楼上说的那样, innerfunC(f1,f2)(), 后面加一对括号执行就可以了.

这个和装饰器十分相似, 楼主可以去看看Python的装饰器,

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题