将lambda函数类型化为函数参数

won*_*ton 4 python type-hinting python-2.7 python-3.x

我有一个接受lambda的函数:

def my_function(some_lambda):
  # do stuff
  some_other_variable = some_lambda(some_variable)

my_function(lambda x: x + 2)
Run Code Online (Sandbox Code Playgroud)

我想输入传递的lambda函数.

我试过了

def my_function(some_lambda: lambda) -> None:
# SyntaxError: invalid syntax
from typing import Lambda
# ImportError: cannot import name 'Lambda'
Run Code Online (Sandbox Code Playgroud)

我的IDE在2.7跨式类型提示上抱怨类似的东西,例如

def my_function(some_lambda: lambda) -> None:
  # type: (lambda) -> None
# formal parameter name expected
Run Code Online (Sandbox Code Playgroud)

won*_*ton 6

当你想到它时,这是显而易见的,但是需要一段时间才能注册.lambda是一个函数.没有函数类型,但包中有一个Callable类型typing.解决这个问题的方法是

from typing import Callable
def my_function(some_lambda: Callable) -> None:
Run Code Online (Sandbox Code Playgroud)

Python 2版本:

from typing import Callable
def my_function(some_lambda):
  # type: (Callable) -> None
Run Code Online (Sandbox Code Playgroud)

  • 您还可以进一步限制函数类型:例如,`Callable [[int],int]`是一个单参数函数的类型,它接受一个`int`并返回一个`int`. (2认同)