# 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'))
。
如何将参数两次传递给变量两次,没有像函数一样的参数占位符?
答案 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)