2017-09-07 2 views
4

J'ai une fonction qui prend une lambda:fonction Typehinting lambda comme argument de la fonction

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

my_function(lambda x: x + 2) 

Je voudrais typehint la fonction lambda passé.

J'ai essayé

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

Mon IDE se plaint de choses similaires sur 2.7 typehints chevauchés, par exemple

def my_function(some_lambda: lambda) -> None: 
    # type: (lambda) -> None 
# formal parameter name expected 

Répondre

5

Cela est évident quand on y pense, mais il a fallu un certain temps pour vous inscrire dans la tête. Un lambda est une fonction. Il n'y a pas de type de fonction mais il y a un type Callable dans le paquet typing. La solution à ce problème est

from typing import Callable 
def my_function(some_lambda: Callable) -> None: 

Python 2 Version:

from typing import Callable 
def my_function(some_lambda): 
    # type: (Callable) -> None 
+2

Vous pouvez également limiter davantage le type de fonction: par exemple, 'appelable [[int], int]' est le type d'un -argument fonction qui prend un 'int' et retourne un' int'. – chepner