Typehinting lambda 函数作为函数参数
Posted
技术标签:
【中文标题】Typehinting lambda 函数作为函数参数【英文标题】:Typehinting lambda function as function argument 【发布时间】:2018-02-16 17:09:18 【问题描述】:我有一个接受 lambda 的函数:
def my_function(some_lambda):
# do stuff
some_other_variable = some_lambda(some_variable)
my_function(lambda x: x + 2)
我想输入提示传递的 lambda 函数。
我试过了
def my_function(some_lambda: lambda) -> None:
# SyntaxError: invalid syntax
from typing import Lambda
# ImportError: cannot import name 'Lambda'
我的 IDE 在 2.7 straddled typehints 上抱怨类似的事情,例如
def my_function(some_lambda: lambda) -> None:
# type: (lambda) -> None
# formal parameter name expected
【问题讨论】:
【参考方案1】:这在您考虑时很明显,但是需要一段时间才能在脑海中注册。 lambda 是一个函数。没有函数类型,但typing
包中有Callable
类型。这个问题的解决方法是
from typing import Callable
def my_function(some_lambda: Callable) -> None:
Python 2 版本:
from typing import Callable
def my_function(some_lambda):
# type: (Callable) -> None
【讨论】:
您还可以进一步限制函数类型:例如,Callable[[int], int]
是接受 int
并返回 int
的单参数函数的类型。【参考方案2】:
Callable 是您问题的答案。
from typing import Callable
some_lambda: Callable[[int] int] = lambda x: x + 2
def my_function(func: Callable[[int], int]) -> None:
# do some stuff
my_function(some_lambda)
【讨论】:
以上是关于Typehinting lambda 函数作为函数参数的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin标准库函数 ② ( run 标准库函数 | run 函数传入 Lambda 表达式作为参数 | run 函数传入函数引用作为参数 )
Kotlin函数 ⑦ ( 内联函数 | Lambda 表达式弊端 | “ 内联 “ 机制避免内存开销 - 将使用 Lambda 表达式作为参数的函数定义为内联函数 | 内联函数本质 - 宏替换 )