Recherche…


Introduction

Comme vous le savez probablement si vous venez de l'école de POO, la spécialisation d'une classe abstraite et son utilisation est une pratique que vous devez garder à l'esprit lorsque vous écrivez votre code.

Et si vous pouviez définir une fonction abstraite et la spécialiser pour en créer différentes versions? Le considère comme une sorte de fonction Héritage où vous liez des paramètres spécifiques pour les rendre fiables pour un scénario spécifique.

Syntaxe

  • partial (fonction, ** params_you_want_fix)

Paramètres

Param détails
X le nombre à soulever
y l'exposant
élever la fonction à être spécialisée

Remarques

Comme indiqué dans Python doc les functools.partial :

Renvoie un nouvel objet partiel qui, lorsqu'il sera appelé, se comportera comme func appelé avec les arguments positionnels args et les mots clés arguments. Si plusieurs arguments sont fournis à l'appel, ils sont ajoutés aux arguments. Si des arguments de mots-clés supplémentaires sont fournis, ils étendent et remplacent les mots-clés.

Consultez ce lien pour voir comment une partie peut être mise en œuvre.

Élever le pouvoir

Supposons que nous voulions augmenter x à un nombre y .

Vous écrivez ceci comme:

def raise_power(x, y):
    return x**y

Que se passe-t-il si votre valeur y peut prendre un ensemble fini de valeurs?

Supposons que y soit un de [3,4,5] et supposons que vous ne souhaitiez pas offrir à l'utilisateur final la possibilité d'utiliser une telle fonction, car elle nécessite beaucoup de calculs. En fait, vous devriez vérifier si y a une valeur valide et réécrire votre fonction en tant que:

def raise(x, y):
    if y in (3,4,5):
        return x**y
    raise NumberNotInRangeException("You should provide a valid exponent")

Désordonné? Utilisons la forme abstraite et spécialisons-la dans les trois cas: implémentons-les partiellement .

from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)

Que se passe t-il ici? Nous avons fixé les paramètres y et défini trois fonctions différentes.

Nul besoin d'utiliser la fonction abstraite définie ci-dessus (vous pourriez la rendre privée ), mais vous pourriez utiliser des fonctions partielles appliquées pour traiter un nombre à une valeur fixe.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow