我在一个教程上看到过这个方法,如何在高阶函数上输入两个不同的参数。
def def1(arg1):
def def2(arg2):
arg1 +' '+ arg2
print(def2)
Holder = def1('Morgan')
Holder('Dexter')
如果你能明确每个函数的参数和返回结果,那么理解高阶函数就会容易得多。 更好的名称、docstrings和类型注释都有很大的帮助。
from typing import Callable
def name_generator(last_name: str) -> Callable[[str], str]:
"""Returns a function that returns full names for a given last name."""
def full_name(first_name: str) -> str:
"""Returns the full name of a person with the given first name."""
return first_name + ' ' + last_name
return full_name
morgan_name = name_generator('Morgan')
print(morgan_name('Dexter')) # prints "Dexter Morgan"
print(morgan_name('Debra')) # prints "Debra Morgan"
如果你想让函数本身进行打印,那么打印需要发生在你的高阶函数返回的函数中。不 在高阶函数本身内部!
from typing import Callable
def name_printer(last_name: str) -> Callable[[str], None]:
"""Returns a function that prints full names for a given last name."""
def print_name(first_name: str) -> None:
"""Prints the full name of a person with the given first name."""
print(first_name + ' ' + last_name)
return print_name
morgan_print = name_printer('Morgan')
morgan_print('Dexter') # prints "Dexter Morgan"
morgan_print('Debra') # prints "Debra Morgan"
的 def1
函数不返回任何东西(所以它默认为 None
). 如果你想 def1
归还 def2
函数,那么你就必须明确地用 return def2
在最后。
def def1(arg1):
def def2(arg2):
arg1 +' '+ arg2
return def2
Holder = def1('Morgan')
Holder('Dexter')