IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Design Pattern - Créer une fonction alias d'une méthode [Python 2.X]


Sujet :

Python

  1. #1
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut Design Pattern - Créer une fonction alias d'une méthode
    Bonjour,

    Je me demande s'il est possible (et judicieux) de créer quelque chose qui fasse ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    funcs = (Foo(arg_1), Bar(arg_2, arg_3))
     
    for func in funcs:
        func(arg)
    Voici un exemple concret d'utilisation. Je souhaite calculer une moyenne mobile sur x valeurs. J'ai donc une fonction qui me fait ça et qui est construite à peu près comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def roll_average(array, n):
        pass
    J'aimerais pouvoir définir par la suite une fonction "héritée" de roll_average mais avec le paramètre n fixe, comme 10d_roll_average (moyenne mobile sur 10 jours). Je pourrais ainsi créer un nombre indéterminé de fonctions qui pourront toutes être appelée simplement en faisant f(array). Peut-être peut-on transformer roll_average en une classe avec comme attribut n, la période sur laquelle faire la moyenne et une méthode calc(). Un peu comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class RollAverage(object):
        def __init__(self, n):
            self.n = n
        def calc(self, array):
            pass
     
    10d_roll_average = RollAverage(10)
    res = 10d_roll_average.calc(array)
    Mais je ne trouve pas ça super élégant. Ne peut-on pas créer un alias de la méthode calc() de sorte à faire plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    10d_roll_average = RollAverage(10)
    res = 10d_roll_average(array)
    Ciao

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Vous avez les "lambda" ou plus généralement functools.partial pour çà.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def roll_average(array, n):
        pass
     
    roll_average10 = lambda array: roll_average(array, 10)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Merci, partials est exactement ce que j'avais en tête. Pas besoin de réinventer la roue.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/11/2007, 14h46
  2. Réponses: 1
    Dernier message: 25/10/2007, 21h25
  3. Appel d'une fonction A depuis une fonction B.
    Par LeFlou dans le forum C++
    Réponses: 9
    Dernier message: 22/05/2007, 17h36
  4. [VBA-E] Une fonction Excel dans une fonction VBA
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/07/2006, 10h21
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo