2
votes

Quel indice de type puis-je utiliser en Python si mon type est une fonction?

Je veux utiliser des indices de type en Python, mais il y a certains cas où le type de mes paramètres ne me sont pas clairs ... les fonctions ont-elles un type ou sont-elles un cas particulier. Je voudrais faire quelque chose comme ceci:

pseudocode:

def run_function(function_to_run: fn):
  function_to_run(data)

est-ce possible? Si oui, quel type dois-je utiliser?

modifier: J'espérais distinguer une fonction d'autres appelables tels que les classes ... mais peut-être que cela n'a pas d'importance et est trop prudent.


3 commentaires

En plus des réponses ci-dessous, vous pouvez voir un exemple ici .


Il existe déjà une distinction au niveau du type entre les fonctions intégrées et définies par l'utilisateur dont vous ne vous souciez presque certainement pas. Quel cas d'utilisation avez-vous en tête qui devrait empêcher un objet appelable (comme une classe, c'est-à-dire une instance de type )?


C'est une question à laquelle j'essaie de répondre moi-même. Je pense que je ne me soucie peut-être pas de la distinction, à part que j'ai une préférence pour être plus explicite sur le type. J'aurai probablement juste besoin d'expérimenter avec Callable et de voir si je rencontre des problèmes.


3 Réponses :


2
votes

typing.Callable devrait fonctionner bien. Vous ne vous souciez pas vraiment du fait que ce soit spécifiquement une fonction, cela pourrait être une classe ou une instance appelable d'une sorte.


0 commentaires

3
votes

comme mentionné dans la documentation: vous pouvez utiliser Callable .

vous pouvez par exemple l'utiliser de cette façon:

from typing import Callable

def run_function(function_to_run: Callable[[int], str]):
    function_to_run(data)

si function_to_run est une fonction de int à str.


0 commentaires

2
votes

Bien que vous ne vous souciez presque certainement pas de la distinction entre les différents types appelables, vous pouvez imposer que si vous le souhaitez Le module types fournit un certain nombre de noms spécifiques pour différents types de fonctions (certaines dont vous ne pensez peut-être même pas comme des types différents). Pour n'en nommer que quelques-uns:

  • types.FunctionType et types.LambdaType (alias pour le même type sous-jacent)
  • types.BuiltinMethodType et types.BuiltinFunctionType
  • types.MethodWrapperType
  • types.MethodDescriptorType

0 commentaires