Nouvelles fonctionnalités de Python 3.4.0 (3) - Fonctions génériques à distribution unique

Aujourd'hui, c'est les fonctions génériques de distribution unique (PEP-443). La fonction générique est souvent traduite comme une fonction générique, mais elle est utilisée légèrement différemment selon la langue. En Python, cela semble être utilisé pour signifier "donner le même nom à plusieurs fonctions qui se comportent différemment selon le type d'argument".

Je ne comprends pas du tout même si j'écris, alors je vais vous donner un exemple. Considérons une fonction dont la sortie diffère selon le type d'argument. Cela ressemble à ceci sans utiliser de fonctions génériques.

def print_func(arg):
    arg_type = type(arg)
    if arg_type is int:
        print("found integer:", arg)
    elif arg_type is list:
        print("found list:", arg)
    else:
        print("found something:", arg)

print_func(1)
print_func(['a','b','c'])
print_func(1.23)

Traitez en vérifiant le type de l'argument d'entrée un par un avec l'instruction if. Le résultat de l'exécution est le suivant.

found integer: 1
found list: ['a', 'b', 'c']
found something: 1.23

Si vous écrivez ceci avec des fonctions génériques de distribution unique, ce sera comme ceci.

from functools import singledispatch

@singledispatch
def print_func(arg):
    print("found something:", arg)

@print_func.register(int)
def _(arg):
    print("found integer:", arg)

@print_func.register(list)
def _(arg):
    print("found list:", arg)

print_func(1)
print_func(['a','b','c'])
print_func(1.23)

Cela ressemble à la modification de la fonction de base avec un seul décorateur de patch et à l'ajout d'un traitement pour chaque type à l'aide de la méthode register. Laquelle est la meilleure est subtile, mais si le traitement de chaque type devient plus long, cela peut être plus propre que de le mettre dans une instruction if.

Le résultat est le même que ci-dessus, il est donc omis.

Mais je ne vois aucune utilité. Il est courant de voir une certaine valeur et de la distribuer, par exemple, l'analyse d'un tel groupe de données, car le format des données qui suit peut être connu à partir de la valeur de Header. Dans un tel cas, il est souvent réalisé en préparant un Dict qui soustrait une fonction de la valeur, mais il s'agit d'un type.

Recommended Posts

Nouvelles fonctionnalités de Python 3.4.0 (3) - Fonctions génériques à distribution unique
Quoi de neuf dans Python 3.5
Nouveau dans Python 3.4.0 (1) --pathlib
Quoi de neuf dans Python 3.6
Nouveautés de Python 3.10 (Résumé)
Remplacer les fonctions de bibliothèque en Python
Nouveau dans Python 3.4.0 (2) --enum
Nouveautés de Python 3.9 (Résumé)
Fonctions Python apprises avec la chimioinfomatique
[python] Gérer les fonctions dans une liste
Nouveau dans les dictionnaires de fusion python3.9
Utilisation de variables globales dans les fonctions python
Définir dynamiquement des fonctions (méthodes) en Python
Nouvelle grammaire et fonctionnalités Python non mentionnées dans le livre d'introduction
Fonctions Python
Nouvelles fonctionnalités de Python 3.9 (1) -L'opérateur d'ensemble de somme peut être utilisé dans le type de dictionnaire.
Nouveautés de Python 3.9 (2) - Tri des graphes non circulés dirigés en Python
[Python3] Définir dynamiquement des variables globales dans une fonction
Utilisez facilement vos propres fonctions en Python
Reconnaissance de scène par quantité de fonctionnalités GIST en Python
[Astuces] Écriture facile à lire lors de la connexion de fonctions en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Constante en Python
Utilisez diverses fonctionnalités de rabbimq avec python pika
J'ai touché certaines des nouvelles fonctionnalités de Python 3.8 ①
# Bases de Python (fonctions)
FizzBuzz en Python
Sqlite en Python
[Débutant] Fonctions Python
Étape AIC en Python
Créer une nouvelle page en confluence avec Python
Obtenez le fichier, la fonction, le numéro de ligne en cours d'exécution en python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Fonctions Python faciles à utiliser