【问题标题】:Typehinting lambda function as function argumentTypehinting lambda 函数作为函数参数
【发布时间】: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

【问题讨论】:

    标签: python python-2.7 python-3.x type-hinting


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 2021-08-30
      • 2021-03-18
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2017-04-12
      相关资源
      最近更新 更多