应用高阶函数时,"TypeError: 'NoneType'对象不可调用"。

问题描述 投票:0回答:1

我在一个教程上看到过这个方法,如何在高阶函数上输入两个不同的参数。

def def1(arg1):
  def def2(arg2):
      arg1 +' '+  arg2
  print(def2)
Holder = def1('Morgan')
Holder('Dexter')
python function closures
1个回答
1
投票

如果你能明确每个函数的参数和返回结果,那么理解高阶函数就会容易得多。 更好的名称、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"

0
投票

def1 函数不返回任何东西(所以它默认为 None). 如果你想 def1 归还 def2 函数,那么你就必须明确地用 return def2 在最后。

def def1(arg1):
  def def2(arg2):
      arg1 +' '+  arg2
  return def2
Holder = def1('Morgan')
Holder('Dexter')
© www.soinside.com 2019 - 2024. All rights reserved.