Forum Programmation.python noob : fonction avec nombre de paramètres variable

Posté par  .
Étiquettes : aucune
0
5
avr.
2006
Bonjour,
bon c'est une question de débutant mais bon je vous serais reconnaissant de m'aider.

Je cherche à faire une fonction que l'on puisse appelé par un nombre variable de paramètres. Donc normalement on fais
def nom_fonction (param1=val1, param2=val2,.....)

mais moi je veux que le val2 ne soit pas une constant mais dépend du paramètre précédent. Je fais par exemple
def nom_fonction (une_chaine,param2=len(une_chaine),...)
et là python détecte une erreur (je suppose que c'est parce qu'il n'arrive pas à évaluer "len(une_chaine) lors de l'interprétation)

Comment dois-je faire pou éviter cette erreur?

merci par avance
  • # Hum...

    Posté par  (site web personnel) . Évalué à 4.

    Ce que tu cherches à faire là est impossible tel quel. On ne procède pas ainsi pour définir une fonction.
    Si ton second paramètre dépend du premier, et bien tu n'as pas besoin de le passer en paramètre ; tout simplement, tu le calcules dans le corps de ta fonction au moment où tu en as besoin.

    Donc, tu définis ta fonction ainsi :

    def nom_fonction(une_chaine="toto", autre_param=val, etc...):
      l = len(une_chaine)
      
    (ici le traitement de ta fonction, utilisant une_chaine , l, autre_param, ...)
    • [^] # Re: Hum...

      Posté par  (site web personnel) . Évalué à 3.

      Et si la chaîne fait 12 caractères, mais qu'on veut spécifier « 3 » en deuxième param au moment d'appeler la fonction ? La solution habituelle est de donner une valeur par défaut "impossible" : par exemple None pour une longueur.
      def fonction(chaine, longueur=None):
      	if longueur is None:
      		longueur = len(chaine)
      	.....
      
      Ici, on aurait pu aussi choisir -1 comme valeur par défaut au lieu de None, et adapter le test.
      • [^] # Re: Hum...

        Posté par  . Évalué à 1.

        ok merci c'est bien ce que je voulais

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.