【发布时间】:2019-09-07 21:31:47
【问题描述】:
我大量使用来自 python 3 的 python 类型支持。
最近我试图将函数作为参数传递,但在 typing.Callable 签名中使用 kwargs 没有任何帮助。
请检查下面的代码和 cmets。
import typing
# some function with singnature typing
def fn1_as_arg_with_kwargs(a: int, b: float) -> float:
return a + b
# some function with singnature typing
def fn2_as_arg_with_kwargs(a: int, b: float) -> float:
return a * b
# function that get callables as arg
# this works with typing
def function_executor(
a: int,
b: float,
fn: typing.Callable[[int, float], float]):
return fn(a, b)
# But what if I want to name my kwargs
# (something like below which does not work)
# ... this will help me more complex scenarios
# ... or am I expecting a lot from python3 ;)
def function_executor(
a: int,
b: float,
fn: typing.Callable[["a": int, "b": float], float]):
return fn(a=a, b=b)
【问题讨论】:
-
当你定义一个函数时,你指定它的签名,现在包括参数的类型。将 dict 的结构指定为参数没有什么价值,尤其是
**kwargs,它只是收集命名的 args,即它取决于函数的调用方式。改用其他适当和特定的类型(例如 NamedTuple、Dataclass、Enum、自定义类),也就是说像往常一样显式每个参数 -
我在某些情况下确实使用 NamedTuple 作为参数,这在某些情况下是一个救星。但是很好奇是否支持上述内容,因为我需要 typedef 一些遗留功能。如果根本不支持,请告诉我,因为这可能更有帮助。
标签: python python-3.x python-typing