[résolu] Définir une fonction sans l'éxécuter

Bonjour,

Bon, la question me parait un peu « bête » mais je ne trouve pas la réponse.

Définir, une fonction, ok.
le problème que j’ai, c’est de la définir sans l’exécuter au moment où je la définie.

Hello,

Ta question est « bizarre »

Prenons l’exemple bête suivant :

def test():
    print ("coucou")

def test2():
    print ("Salut")

test2()

Dans le bout de « code » ci-dessus ne sera appelé que test2, pas test mais test existe bel et bien et pourra être appelé plus tard/ailleurs

j’ai fais le test avec ton exemple, effectivement c’est le cas.
(il se passe bien ce que tu dis)

Dans mes programmes, la plupart des fonctions que j’écris (j’en ai pas fait « des tonnes » non plus) se lancent quand je les définies sans que je les appellent, je ne comprends pas.

j’ai ajouté un « return » (pour ressembler plus à mes bout de code) à la fin de ton exemple, ça ne change rien.
Je comprends pas!

Poste ton code on pourra te guider :+1:

par exemple, cette fonction s’est exécutée toute seule:

# définition de la fonction (éxécutée dans le vide)
x=0
def reducePsw(x):
    # suppression des caractéres identiques:
    if 0<x<NbrePsw:
        msg=str(x)+"e mot"
        if evol: print("réduction ",msg)
        for var in str(minuscule)+str(majuscule)+str(nombre):
            if var in psw[x]:
                identique = len(psw[x]) - len( str(psw[x]).replace(var,"") )
                if identique>1:
                    psw[x]=psw[x].replace(var,"")
            # correction de la longueur de la nouvelle chaine:
            size[x]=len(psw[x])
            # mise à jour des calculs sur les longueurs des mots entrés:
            #sizeCalc()
    else:
        if evol: print("fonction \"reducePsw\" erreur d'index")
    return(size,psw)

j’ai utilisé un artifice de la définir en début de liste où je n’ai rien de vital pour pouvoir la définir. Je ne poste pas tout, il y a environ 500 lignes de code, truffées de bugs…

Bonjour,

@Gpapig: je me permet de répondre, pour donner un piste.

Une fonction appelée automatiquement je n’y crois pas trop beaucoup du tout, il y a très certainement un bout de code qq part qui l’appelle dans ce programme ou un autre…
Un test tout bête pour valider c’est de renommer uniquement le nom de la fonction par n’importe quoi et de relancer le programme.

 def reducePsw(x): -> def reducePswTurlututu(x) :

Éventuellement ajouter en début de fonction un

print ("reducePswTurlututu est executé") 

Pour être sûr qu’il n’y a pas un bout de code identique/proche ailleurs qui exécute presque la même chose et de ce fait, tu penses que c’est cette fonction.

Bon courage
A+

2 « J'aime »

Totalement d’accord avec Jelopo, rien n’arrive « par hasard » en programmation.

Tu as forcément un appel à ta fonction quelque part

Bon, alors, j’ai regardé un peu mieux, les autres programmes et la source de mes erreurs de compréhension…

Pour ce programme, effectivement, la fonction n’est pas exécutée lorsqu’elle est définie, (puisque le message d’erreur pour x=0 ne s’affiche plus maintenant) j’ai créé la fonction pour supprimer des répétitions et alléger mon programme et j’avais oublié de supprimer une des répétitions en question.

Concernant les autres programmes, pour charger les fichier de config, j’appliquais une « recette » d’une personne confirmée en python que je n’avais pas totalement comprise, en effet, juste après avoir définie sa fonction avec « def read_conf … », il la lance ensuite de cette manière:
params=read_conf()
au lieu de la lancer sur une ligne séparée, comme c’est indiqué dans les tutos pour débutants, donc je n’avais pas compris jusqu’à présent…

Donc merci, je n’aurais jamais compris tout seul…

Tu progresses et c’est bien :+1:

Après je pense que prendre un vrai tuto de débutant en python serait une bonne idée, car là ton soucis c’est un peu la base de la base de la programmation et si tu as déjà des soucis à ce moment là, tu risques de non seulement faire du chenis dans ton programme mais en plus de te décourager car tu ne maitrises pas les bases.

1 « J'aime »

Tu as raison.
Il y a un certain temps, j’ai pris quelques cours de python et c’était très intéressant.
Python est tellement vaste, je serait effectivement motivé à en reprendre d’autres.

A défaut, je vais effectivement me replonger un peu dans les tutos.
Le risque quand on apprend en « autodidacte », c’est effectivement d’apprendre (ou de croire avoir compris) des choses fausses et de se les trimbaler, par « mauvaise habitude », assez longtemps…

Bonjour,
@Gpapig à tout a fait raison, se replonger dans les bases est très bénéfique pour les développements à venir.

Il y a un an nous avions participé à ce post @Alynx, qui présente pleins de liens, ne pas hésiter à les consulter:

Personnellement, je me méfie toujours des tutos, on est très rarement dans exactement la même configuration que celui qui à rédigé le tuto. Du coup il faut le comprendre, le modifier et l’adapter à nos besoins qui ne sont pas les même que le rédacteur du tuto.

Bon courage.
A+

Bonjour,

Oui, j’ai bien souvenir de ce post, j’en consulte certain de temps en temps…