Comment annoter une fonction Python en utilisant le type de retour d'une autre fonction?

ig-melnyk

Je recherche un analogue de decltype en C ++. Ce que j'essaie d'accomplir est le suivant:

def f(a: int) -> List[Tuple(int, float)]
def g(a: List[int]) -> List[decltype(f)]

L'idée est donc d'utiliser l'annotation de type d'une autre fonction. La solution que j'ai trouvée semble en quelque sorte maladroite:

def g(a: List[int])->f.__annotations__['return']

Fondamentalement, la question est de savoir s'il existe quelque chose comme decltype (peut-être qu'il devrait être appelé "return_type") ou s'il est prévu dans d'autres versions. J'ai également écrit une petite fonction qui illustre l'utilisation possible de cette fonctionnalité:

def return_type(f: Callable):
   try:
       return get_type_hints(f)['return']
   except(KeyError, AttributeError):
       return Any
def g() -> return_type(f):

UPD Comme suggéré par Jim Fasarakis-Hilliard, nous pouvons également utiliser get_type_hints au lieu d' annotations

Dimitris Fasarakis Hilliard

Rien de tel n'existe actuellement et aucun problème sur le tracker de saisie ne semble indiquer que c'est prévu. Vous êtes toujours le bienvenu pour créer un problème et voir comment cela est le bienvenu.

Actuellement, votre approche fait l'affaire (c'est-à-dire attribue un type), le seul changement que j'apporterais serait d'utiliser à get_type_hintspartir de typingplutôt que de saisir __annotations__directement l' attribut. Couplé avec .get(puisqu'il renvoie un dict), cela pourrait également raccourcir:

def return_type(f):
    return get_type_hints(f).get('return', Any)

def g() -> return_type(f):

Ce qui peut bien sûr être supprimé de la fonction et utilisé en une seule ligne si vous le souhaitez.

Si la possibilité que des objets aléatoires soient fournis aux return_typesorties, vous devrez attraper le TypeErrorqu'il déclenche et renvoyer votre valeur par défaut Any:

def return_type(f):
    try:
        return get_type_hints(f).get('return', Any)
    except TypeError:
        return Any

Bien sûr, étant donné que cela affecte un type de manière dynamique, vous ne pouvez pas vous attendre à ce que les vérificateurs de type statique l'attrapent, vous avez besoin d'indices statiques pour cela.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment déterminer le type en fonction de la valeur de retour d'une fonction

Comment faire en sorte que le type de retour d'une fonction soit l'entrée d'une autre fonction dans la même interface

Comment déduire le type de retour d'une fonction?

Comment obtenir le type de retour d'une fonction

Django annoter le jeu de requêtes en fonction d'une autre requête

Comment spécialiser le type de retour d'une fonction avec une énumération en C ++?

Comment obtenir la valeur de retour d'une fonction en utilisant le contexte comme paramètre?

valeur de retour en utilisant dans une autre fonction

Comment appeler une fonction qui est à l'intérieur d'une autre fonction en utilisant le multitraitement de pool ?

Comment annoter une fonction avec une valeur de retour générique en typographie

Comment définir le type de retour et les paramètres de la fonction Java, en utilisant une sous-classe ou une superclasse?

Comment spécifier le type de retour d'une fonction PySpark en tant que dataframe ?

Programme C Comment obtenir la valeur de retour d'une autre fonction en utilisant l'instruction switch

En typographie, quel est le type de retour d'une fonction qui retourne une fonction void?

Comment spécifier le type de paramètre de fonction d'entrée et le type de retour lors du passage de la fonction en tant qu'argument à une autre fonction?

Définir le type de retour d'une fonction en fonction de l'argument

Comment appeler une fonction de classe en utilisant son pointeur si nous connaissons les arguments et le type de retour?

Modifier le type de retour d'une fonction en fonction de la taille de std :: tuple

Type de propriété en fonction du type de retour d'une autre propriété

Comment obtenir le type de retour d'une fonction membre à partir d'une classe?

Comment utiliser une fonction comme argument d'une autre fonction en PHP en utilisant un pseudo type appelable?

Quel est le type de retour pour une fonction qui renvoie une autre fonction

Comment accéder à une autre classe en utilisant une fonction d'insertion de liste de liens?

Déduire le type de retour d'une fonction dynamiquement

Comment exécuter une fonction en arrière-plan d'une autre fonction en utilisant des threads en python?

Feuilles Google Utiliser le retour d'une fonction de correspondance dans une autre fonction

Comment changer le retour d'une fonction en int?

valeur de retour du multitraitement , en tant qu'entrée d'une autre fonction en python

Comment retourner le fichier de sortie traité par ffmepg et le passer à une autre fonction? en utilisant python

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive