首页 > 解决方案 > 理解函数的一些问题

问题描述

# Define echo
def echo(n):
    """Return the inner_echo function."""

    # Define inner_echo
    def inner_echo(word1):
        """Concatenate n copies of word1."""
        echo_word = word1 * n
        return echo_word

    # Return inner_echo
    return inner_echo

# Call echo: twice
twice = echo(2)

# Call echo: thrice
thrice = echo(3)


# Call twice() and thrice() then print
print(twice('hello'), thrice('hello'))

我不明白最后一行:Print(twice('hello'), thrice('hello'))

如何将参数传递给变量两次或三次,没有像函数那样的参数占位符?

标签: pythonpython-3.x

解决方案


您似乎认为echo是部分评估。这不是这里发生的机制。

您的代码中发生的情况是,返回的对象本身就是一个可以依次调用的函数。我们称返回函数的函数为高阶函数

为了说服自己echo返回的函数确实是inner_echo函数,试试下面的实验

def echo(n):
    def inner_echo(word1):
        return word1 * n
    return inner_echo

twice = echo(2)
print(twice)

输出

<function echo.<locals>.inner_echo at 0x000002437BA36A60>

这告诉我们的是,这twice确实是一个函数。此外,它当前存储在echo调用的局部变量中。最后它的名字确实是inner_echo

部分评价

如前所述,您的代码中发生的不是部分评估。例如,在您的实际代码中,这是行不通的。

echo('foo', 2) # TypeError

如果是这样,您将不得不这样定义echo

from functools import partial

@partial
def echo(n, word):
    print(word * n)

echo('foo', 2)
echo('bar')(3)

推荐阅读