了解功能的一些问题

时间:2018-08-22 12:58:13

标签: python python-3.x

# 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'))

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

1 个答案:

答案 0 :(得分:0)

您似乎认为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)