如何使用与 Python 中的包装函数相同的注释和参数名称创建包装函数

问题描述

我有一个功能

def foo(x: Type1,y: Type2):
    do something..

我想要另一个函数,比如:

def bar(f: Callable,args..):
#do something
#return another function Fizz

并且我希望返回的函数 (Fizz) 具有如下签名:

def Fizz(x: Type1,y: Type2,...)
    pass

解决方法

我发现一个可行的解决方案是:

def foo(x: Type1,y: Type2):
    #do something..

def bar(func: Callable):
  func_signature = signature(func)
  params_it = iter(func_signature.parameters.values())
  x = next(params_it)
  y = next(params_it)
  def fizz(x: x.annotation,y: y.annotation):
      pass
  return fizz

但该函数的局限性在于bar“知道”foo的参数名称