为什么将一个函数赋给另一个变量会起作用

2024-10-06 08:44:17 发布

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

<>我来自C++,我很困惑为什么调用外部Func(打印机)什么都不做,但是如果把它分配给另一个对象,它会做什么?

def outsideFunc(func):

    def insideFunc():
        print("Executing Inside Function")
        print(func())
        print("End Inside Function")
    
    return insideFunc 

def printer():
    return "Hello World"

outsideFunc(printer) #why doesnt this do the functionality of insideFunc

#but this one below does
display = outsideFunc(printer)
display()

Tags: 对象returndefdisplay打印机functionthisprinter
2条回答
def outsideFunc(func):
    def insideFunc():
        print("Executing Inside Function")
        print(func())
        print("End Inside Function")
    return insideFunc 

这个外部函数所做的是创建一个函数(内部函数,它调用您传递给外部函数的内容),然后将该函数返回给调用者。它实际上并没有调用内部函数

Python中的函数是第一类对象,可以像其他对象一样传递并绑定到其他名称

下面描述了调用此外部函数的两种方式:

# This passes `printer` to the outside function and it returns a function
# that will call it. It proceeds to throw away that function since you don't
# actually bind it to anything.

outsideFunc(printer)

# The first line below does exactly the same as the line above but it
# binds the function to the display name.
# The second line then uses that name to CALL the function, running
# the code within it.

display = outsideFunc(printer)
display()

功能差异的功能/结果类似于以下内容:

def fortyTwo():
    return 42

print(fortyTwo)
print(fortyTwo())

twiceTwentyOne = fortyTwo
print(twiceTwentyOne)
print(twiceTwentyOne())

第一个print将简单地打印函数本身的表示,类似于<function fortyTwo at 0x7f9822dcb4c0>。第二个函数实际上将调用该函数并打印出它返回的内容。它知道如何调用它,就是名称后面有()

最后三行显示绑定到另一个名称的函数,您也可以调用该名称以获得相同的效果


另外,如果希望两个代码段在函数中相同,则需要调用第一种情况下返回的函数,如下所示:

outsideFunc(printer)()

你返回^ {< CD1>},这是一个函数,认为C++ + lambda,然后你可以稍后调用。

相关问题 更多 >