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 :

[Python 3.X] nom de fonction en paramètre d'une autre fonction


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut [Python 3.X] nom de fonction en paramètre d'une autre fonction
    Bonjour,

    j'aimerais savoir si passé le nom d'une fonction paramètre était 'crade' comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    def foo(var, name):
        if name == 'foo_1':
            print(var + ' OK')
        if name == 'foo_1' or name =='foo_2' :
            print(var + ' KO')
     
    def foo_1():
        foo('toto', foo_1.__name__)
     
    def foo_2():
        foo('titi', foo_2.__name__)
     
    ################################################################################
     
    foo_1()
    foo_2()
    ou vaut il mieux séparer la fonction foo(...) en deux fonctions distincts ?

    Cordialement

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Pas plus qu'une chaîne standard... La seule chose, c'est quel est l'intérêt d'une telle pratique, conceptuellement, je ne vois pas, à part peut-être pour faire du profilage de fonctions ? Crade, ça ne l'est jamais à partir du moment où sémantiquement et conceptuellement parlant, c'est au point ! En gros, tout va dépendre de ta réflexion sur la problématique et de comment tu t'organises.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Salut,

    Citation Envoyé par zancrows Voir le message
    j'aimerais savoir si passé le nom d'une fonction paramètre était 'crade'
    Ce qui est "crade", c'est plutôt ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def foo(var, name):
        if name == 'foo_1':
            print(var + ' OK')
        if name == 'foo_1' or name =='foo_2' :
            print(var + ' KO')
    à cause des if...then...else... que la POO vous permettrait de supprimer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    c'était à la base une idée pour déterminer le traitement en fonction de qui appel la fonction, et du coup j'ai voulu essayer ca
    je vais surement passer pour un idiot mais comment la POO supprimerait cela ?

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Je ne vois pas trop l'intérêt de passer le nom d'une fonction à une autre, surtout que ce nom peut évoluer avec la vie du code (ne pas oublier de checker alors la fonction "foo" ce qui est malsain).

    Personnellement je verrais plutôt l'inverse avec une fonction "mère" recevoir comme paramètre la fonction "fille" à exécuter (en C ça se fait par pointeurs de fonctions et quelque chose me dit que ça doit-être la même chose, mais caché, en Python...)

    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def foo(fct):
    	fct()
     
    def foo_1():
        print "toto OK"
        print "toto KO"
     
    def foo_2():
        print "titi KO"
     
    ################################################################################
     
    foo(foo_1)
    foo(foo_2)

    Maintenant si vraiment il faut mettre "foo" en bas de la pile et lui faire faire des choix selon qui l'appelle, alors j'utiliserais un truc un peu moins volatile que le nom de la fonction appelante...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    def foo(var, name):
    	if name == "etat1":
    		print "%s OK" % var
    		print "%s KO" % var
    	if name == "etat2":
    		print "%s KO" % var
     
    def foo_1():
        foo('toto', "etat1")
     
    def foo_2():
        foo('titi', "etat2")
     
    ################################################################################
     
    foo_1()
    foo_2()
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre actif Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Par défaut
    si je veux bien comprendre ton probleme, tu veux passer en parametre le nom d'une fonction dans une autre.
    mais et si tu essayais d'appeler une fonction dans une autre fonction ceci te faciliterais la tâche et te feras ecrire moins dee ligne de code..
    mais si tu veux utiliser la POO c'est utile mais long. le but de la programmation c'est en fait de racourcis les difficultés.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Citation Envoyé par zancrows Voir le message
    je vais surement passer pour un idiot mais comment la POO supprimerait cela ?
    La POO permet de poser le problème différemment.

    Plutôt qu'avoir une fonction qui trie en fonction de la gueule du client, vous définissez les "services" qu'auront les différents clients lorsqu'ils demandent/appellent "foo".

    Sûr que mettre des "class" dans l'exemple minuscule que vous donnez c'est sortir une artillerie lourde: il y aurait tellement de lignes dues à la construction qu'on n'en verrait pas trop l'intérêt.
    On peut se contenter d'une "closure":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def foo(client):
     
        def a(var):
            print ('%s KO' % var)
            b(var)
     
        def b(var):
            print ("%s KO" % var)
     
        services = { 1: a, 2: b }
        return services.get(client)
     
    foo(1)('abc')
    foo(2)('abc')
    On a toujours 2 fonctions.
    La différence est dans l'association de la fonction qui va faire le boulot.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    d’accord je comprends mieux maintenant, j'avais jamais pensé à faire quelque chose comme cela,
    merci pour vos réponses ca m'a permis d'apprendre deux trois trucs

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

Discussions similaires

  1. passer le nom d'une fonction comme paramètre d'une autre fonction?
    Par med_alpa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/03/2010, 12h57
  2. Réponses: 16
    Dernier message: 26/05/2009, 13h32
  3. Réponses: 15
    Dernier message: 02/08/2007, 11h17
  4. fonction en paramètre d'une autre fonction
    Par zorobab dans le forum Général Python
    Réponses: 3
    Dernier message: 25/03/2007, 13h34
  5. [VB]Passage de Fonction en paramètre (d'une autre fonction)
    Par Australia dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 21/03/2006, 18h55

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