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 :

Conversion de chaînes de caractères


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 26
    Points : 22
    Points
    22
    Par défaut Conversion de chaînes de caractères
    Salut,

    Je récupère une liste de fichiers et j'aimerais les mettre en forme. Je me suis donc créé le fichier de test suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fileSystTbl = ['/', '/usr', '/var']
     
    def convElement(list):
        for element in list:
            if element == '/':
                '/'.replace('/','root')
            else:
                element.strip('/')
     
    print convElement(fileSystTbl)
    Pour l'instant, il me renvoie "None", mais j'aimerais qu'il puisse me renvoyer la liste: root, usr, var.

    Comment faire?

    Merci d'avance pour vos réponses

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut
    C'est normale que python te renvoi "none" puisque ta fonction ne retourne rien.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut
    Bonjour,

    Aucun return dans votre fonction donc c'est normale que None soit renvoyé.

    J'ai modifié votre code sur des détails:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fileSystTbl = ['/', '/usr', '/var']
     
    def convElement(list):
        for ind, element in enumerate(list):
            if element == '/':
                list[ind] = 'root'
            else:
                list[ind] = element.strip('/')
        return list
     
    print convElement(fileSystTbl)

  4. #4
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Bonjour,


    En python, list est un objet mutable et les objets mutables sont passés par référence lors d'appel de fonction. En conséquence, la fonction modifie directement l'objet. L'expression return n'est pas nécessaire dans ce contexte.

    Comme nos amis ont indiqué, puisque vous n'avez pas de clause return dans votre code, Python ajoute implicitement une expression "return None". Étant donné que vous avez inclu l'appel de fonction directement dans l'appel de "print" c'est donc "None" que print va récupérer. La solution consiste donc à séparer ces deux appels.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def convElement(list):
        for ind, element in enumerate(list):
            if element == '/':
                list[ind] = 'root'
            else:
                list[ind] = element.strip('/')
     
    fileSystTbl = ['/', '/usr', '/var']			
    convElement(fileSystTbl)
    print(fileSystTbl)
    Et on obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    >>> ['root', 'usr', 'var']
    Cordialement,
    Dariyoosh

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut
    En effet, list est un objet mutable d'où les détails de modification précédent.
    En revanche, il est toujours bon de mettre un return de ce que l'on veut.
    Car comme vous l'expliquez ne rien mettre est équivalent à mettre un return ou return None donc peu d'intérêt (qui peu le plus peu le moins).

  6. #6
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Citation Envoyé par Gakusei Voir le message
    ... En revanche, il est toujours bon de mettre un return de ce que l'on veut ...
    Tout à fait d'accord avec vous Il faut toujours le mettre pour améliorer la lisibilité et la clarté du code. En C et en Java on peut utiliser le mot "void" afin de préciser que la fonction/méthode en question ne renvoie rien, mais en python ce n'est pas le cas pour les fonctions et d'ailleurs je me demande pourquoi il n'ont pas fait
    Cordialement,
    Dariyoosh

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut
    Citation Envoyé par dariyoosh Voir le message
    En C et en Java on peut utiliser le mot "void" afin de préciser que la fonction/méthode en question ne renvoie rien
    Oui, en réalité on peut définir le type d'argument de retour comme int, float, string , objet...
    Le cas de void est particulier puisque l'on ne renvoie en effet rien.
    Python étant un langage interprété (typage dynamique), le type de données renvoié n'est pas explicité car le typage est automatique contrairement au C. Du coup, pour s'adapter au cas de void et vue que dans les autres cas il faut renvoié une valeur, par défaut void est remplacé par un NoneType donc None est renvoyé (mathématiquement c'est un ensemble vide ).

    Je ne sais pas si c'est clair

  8. #8
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Citation Envoyé par Gakusei Voir le message
    ... Python étant un langage interprété (typage dynamique), le type de données renvoié n'est pas explicité car le typage est automatique contrairement au C ...
    Très juste, en python on est pas sous un système de typage static,
    merci pour cette remarque
    Cordialement,
    Dariyoosh

Discussions similaires

  1. Conversion de chaînes de caractères en numérique
    Par djelloharmel dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/12/2011, 11h03
  2. [LIST] Problème de conversion de chaînes de caractères
    Par yannick29000 dans le forum Autres langages
    Réponses: 0
    Dernier message: 31/07/2009, 12h10
  3. Typage -> conversion en chaîne de caractère
    Par CodeCRC dans le forum Général Python
    Réponses: 1
    Dernier message: 30/06/2009, 17h57
  4. Conversion de chaîne de caractères
    Par mr_samurai dans le forum Fortran
    Réponses: 6
    Dernier message: 23/01/2008, 08h44
  5. Conversion de chaîne de caractères
    Par fracam2 dans le forum Access
    Réponses: 3
    Dernier message: 19/07/2006, 11h52

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