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 :

Un return apparemment sans intérêt [Python 3.X]


Sujet :

Python

  1. #1
    Membre régulier Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Points : 98
    Points
    98
    Par défaut Un return apparemment sans intérêt
    Bonjour à tous,

    Quelqu'un pourrait t'il m'expliquer pourquoi dans certains exemples de fonctions du Swinnen, on retrouve l'instruction return alors qu'il n'y a rien à en attendre en retour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def filtre(source,destination):
        "recopier un fichier en éliminant les lignes de remarques"
        fs = open(source, 'r')
        fd = open(destination, 'w')
        while 1:
            txt = fs.readline()
            if txt =='':
                break
            if txt[0] != '#':
                fd.write(txt)
        fs.close()
        fd.close()
        return
    Débutant en janvier 2024 l'apprentissage d'un langage de programmation et n'étant pas particulièrement doué, soyez indulgents.

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 105
    Points : 4 455
    Points
    4 455
    Par défaut
    Citation Envoyé par scalpel Voir le message
    dans certains exemples de fonctions
    Ici, il n'y a aucun intérêt ! (A ne pas faire)
    Mais, parfois, on utilise un simple return pour quitter (la fonction) avant la fin de notre fonction (équivalent d'un break pour une boucle)

    ------------------------

    Note: code correct, mais aujourd'hui avec une version de python récente, on va plutôt écrire une chose du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with open(source, 'r') as fs:
        while txt := fs.readline():
            if txt[0]...
    # plus besoin de fs.close() car le fichier est fermé automatiquement à la sortie du block "with"
    ps: si nous voulons absolument utiliser la fonction "readline()" dans le cadre de la découvrir, en fait elle est inutile pour faire cette fonctionnalité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open(source, 'r') as fs:
        for txt in fs:
            if ...
    comprendre: pour chaque ligne dans le fichier faire ...


    ------------------------

    re-note
    if txt[0] != '#': pour un cours, vraiment pas génial préférer if not txt.startswith("#"):
    $moi= ( !== ) ? : ;

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Bonjour,

    @scalpel,

    En Python, une fonction se termine et renvoie None par défaut si aucune instruction return n'est explicitement appelée. Cela signifie que l'instruction return à la fin de la fonction filtre dans votre exemple est redondante dans le sens où elle ne change pas le comportement de la fonction. La fonction renverrait None dans tous les cas, que l'instruction return soit présente ou non.

    La PEP8 n'est pas très bavarde sur ce sujet, mais on voit ceci,

    Nom : Capture d’écran_2024-03-03_11-21-53.png
Affichages : 85
Taille : 52,0 Ko

    qui donne une indication sur ce qui est bien ou pas... mais c'est une convention pas une norme, donc on oblige pas, on conseille.
    Cela met en lumière l'importance de la cohérence dans l'utilisation des instructions return pour améliorer la lisibilité et la maintenabilité du code. Pour votre fonction filtre, cela signifierait soit ne pas inclure d'instruction return si la fonction n'est pas censée retourner une valeur, soit inclure un return None explicite si vous souhaitez suivre strictement la recommandation de la PEP 8 pour la cohérence.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Cela permet de quitter la fonction si elle a été appelée par erreur (mauvais paramètre) pour éviter un travail inutile et voué à l'échec.

    Un exemple: élever chaque élément d'une liste au carré: cela n'a de sens que si ce que reçoit la fonction est bien une liste...

    Solution 1:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def carre(l):
    	# On vérifie que "l" est bien une liste...
    	if isinstance(l, list):
    		# ...ce qui permet alors de la traiter
    		for i in range(len(l)):
    			l[i] = l[i]**2
    	# if
    # carre()

    Solution 2:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def carre(l):
    	# Cette fois, si "l" n'est pas une liste, on quitte la fonction
    	if not isinstance(l, list): return
     
    	# Puisqu'on n'a pas quitté, c'est que "l" est bien une liste donc on peut la traiter
    	for i in range(len(l)):
    		l[i] = l[i]**2
    # carre()
    Et on gagne ainsi une indentation (ce qui, je pense, améliore aussi la lisibilité)

    On a aussi les outils break et continue permettant des actions similaires dans les boucles (interrompre ou continuer la boucle et éviter ainsi de faire un traitement inutile)

    Le code de ton exemple un peu revisité dans le même esprit
    Solution 1
    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 filtre(source,destination):
    	"recopier un fichier en éliminant les lignes de remarques"
    	fs = open(source, 'r')
    	fd = open(destination, 'w')
    	for txt in fs:
    		# Si le premier caractère n'est pas "#", ce n'est pas un commentaire...
    		if txt[0] != '#':
    			# ...donc on peut écrire la ligne dans le fichier
    			fd.write(txt)
    		# if
    	# for
    	fs.close()
    	fd.close()
    # filtre()

    Solution 2
    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
    def filtre(source,destination):
    	"recopier un fichier en éliminant les lignes de remarques"
    	fs = open(source, 'r')
    	fd = open(destination, 'w')
    	for txt in fs:
    		# Si le premier caractère est un "#", alors on recommence la boucle sur la ligne suivante
    		if txt[0] == '#': continue
     
    		# Puisqu'on n'a pas recommencé la boucle, c'est que le premier caractère n'est pas un "#"...
    		# ...donc on peut écrire la ligne dans le fichier
    		fd.write(txt)
    	# for
    	fs.close()
    	fd.close()
    # filtre()

    Toutefois, comme dit papajoker, pour ton exemple précis, ce return final sert effectivement à que dalle.
    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]

  5. #5
    Membre régulier Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Points : 98
    Points
    98
    Par défaut
    Merci pour vos éclaircissements sur l'instruction return, mais quand je cherche à comprendre les exemples que me donne Sve@r, je me dis que le chemin va être long.
    Débutant en janvier 2024 l'apprentissage d'un langage de programmation et n'étant pas particulièrement doué, soyez indulgents.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    J'ai réécrit mes exemples en y rajoutant des commentaires...
    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]

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par scalpel
    mais quand je cherche à comprendre les exemples
    Tu peux essayer de les comprendre, mais le fait de ne pas les comprendre ne sera pas très grave, n'oublie pas que l'objectif est d'observer l'utilisation de return.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Membre régulier Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par papajoker Voir le message
    ... si nous voulons absolument utiliser la fonction "readline()" dans le cadre de la découvrir, en fait elle est inutile pour faire cette fonctionnalité ...
    Citation Envoyé par Sve@r Voir le message
    J'ai réécrit mes exemples en y rajoutant des commentaires...
    Merci, mais je n'arrive toujours pas à comprendre comment on traite ligne par ligne sans la fonction readline()
    C'est vachement déroutant de se retrouver comme par magie avec apparemment une liste à traiter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if txt[0] == '#': continue
    J'ai l'impression d'avoir reculé de 3 semaines
    Débutant en janvier 2024 l'apprentissage d'un langage de programmation et n'étant pas particulièrement doué, soyez indulgents.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par scalpel Voir le message
    Merci, mais je n'arrive toujours pas à comprendre comment on récupère une ligne sans la fonction readline()
    Ca c'est autre chose (qui n'influe pas sur le sujet principal de ce topic)
    Si tu préfères tu peux remplacer for txt in fs par for txt in fs.readline() sans changer le résultat.

    En fait l'objet "fichier" est un objet qui contient la méthode readline() (qui permet de récupérer une ligne) et aussi la méthode __iter__() ce qui permet d'itérer (boucler) dessus.
    Et quand on boucle (itère) sur un fichier, on récupère chaque ligne du fichier.

    la notion "d'itérable" est assez présente en Python. Parce que très présente en informatique. La majorité des traitements se résume généralement à prendre un ensemble d’éléments et les traiter un à uns (traiter les clients d’une banque, les comptes bancaires d’un client, les lignes d’opérations dans un compte, les salles de classe d’un lycée, les cours dans une salle, les élèves dans un cours, les fichiers d’un dossier, les lignes d’un fichier, les mots d’une ligne, etc etc etc).
    Et donc Python offre cette possibilité d'itération sur un maximum d'objets pouvant être considérés comme "ensemble d'éléments". Et un fichier c'est d'abord un ensemble de lignes.
    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]

  10. #10
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 105
    Points : 4 455
    Points
    4 455
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open(source, 'r') as lignes:
        for ligne in lignes:
            if ...
    Tu connais quand même for ?
    La particularité ici est qu'un fichier texte est un itérateur, donc à chaque appel dans une bouche, il retourne automatiquement une ligne.
    En fait un fichier texte fait le même chose qu'une liste c'est exactement la même chose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lignes = ["ligne a","ligne b","ligne v","ligne x"]
    for ligne in lignes:
    Citation Envoyé par scalpel Voir le message
    comme par magie
    non, c'est que tu n'as pas encore vu dans ton livre qu'un fichier est un itérateur
    $moi= ( !== ) ? : ;

  11. #11
    Membre régulier Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Points : 98
    Points
    98
    Par défaut
    Ouf ! Merci
    Débutant en janvier 2024 l'apprentissage d'un langage de programmation et n'étant pas particulièrement doué, soyez indulgents.

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par scalpel
    Merci, mais je n'arrive toujours pas à comprendre comment on traite ligne par ligne sans la fonction readline()
    Ton code pourrait s'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def filtrer(source, destination):
        with open(source, 'r') as fichier_source, \
        open(destination, 'w') as fichier_destination:
            for ligne in fichier_source:
                if not ligne.strip().startswith('#'):
                    fichier_destination.write(ligne)
    EDIT: Mais celle que je préfère est deux fois plus rapide, et tout aussi simple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def filtrer_sans_remarques_gen(source, destination):
        with open(source, 'r', encoding='utf-8') as fichier_source, \
            open(destination, 'w', encoding='utf-8') as fichier_destination:
            lignes_filtrees = (ligne for ligne in fichier_source if not ligne.strip().startswith('#'))
     
            fichier_destination.writelines(lignes_filtrees)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Membre régulier Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Points : 98
    Points
    98
    Par défaut
    Débutant en janvier 2024 l'apprentissage d'un langage de programmation et n'étant pas particulièrement doué, soyez indulgents.

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    et tout aussi simple,
    Citation Envoyé par scalpel Voir le message
    Ah... je crois que ceci fait référence à cela
    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]

  15. #15
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par Sve@r
    Ah... je crois que ceci fait référence à cela
    Et j'ai pas mis ma version binaire qui doit être plus efficace, 5 appels de moins dans le profilage

    Et hop, bien fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def filtrer_sans_remarques_bin(source, destination):
        with open(source, 'rb') as fichier_source, \
            open(destination, 'wb') as fichier_destination:
            for ligne_bin in fichier_source:
                ligne = ligne_bin.decode('utf-8')
                if not ligne.strip().startswith('#'):
                    fichier_destination.write(ligne_bin)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne = ligne_bin.decode('utf-8')
    if not ligne.strip().startswith('#')
    Puisque "ligne" n'est pas réutilisé, peut-être le virer...
    if not ligne_bin.decode('utf-8').strip().startswith('#')...
    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]

  17. #17
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par Sve@r
    Puisque "ligne" n'est pas réutilisé, peut-être le virer...
    if not ligne_bin.decode('utf-8').strip().startswith('#')...
    si elle est réutilisée ligne suivante mais oui on peut dans cette partie de code. Le choix entre utiliser une variable intermédiaire ou enchaîner les appels de méthode directement dépend de la lisibilité et des préférences du développeur.
    Je pensais déjà beaucoup utiliser de méthodes à la chaîne et nuire déjà pas mal à la lisibilité.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  18. #18
    Membre régulier Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Points : 98
    Points
    98
    Par défaut
    Mois aussi je vais envoyer mon code, ça va vous calmer
    Débutant en janvier 2024 l'apprentissage d'un langage de programmation et n'étant pas particulièrement doué, soyez indulgents.

  19. #19
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    T'inquiète pas, ça viendra assez vite.
    Ceci dit, malheureusement, cette instruction de fred1599 lignes_filtrees = (ligne for ligne in fichier_source if not ligne.strip().startswith('#')) tu ne la trouveras pas dans le Swinnen. Il s'agit d'une écriture de liste en intension or (j'en avais déjà parlé quand tu nous as demandé nos avis sur ce livre), cette écriture n'y est pas expliquée.
    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]

  20. #20
    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
    Citation Envoyé par fred1599 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Puisque "ligne" n'est pas réutilisé, peut-être le virer...
    if not ligne_bin.decode('utf-8').strip().startswith('#')...
    si elle est réutilisée ligne suivante mais oui on peut dans cette partie de code. Le choix entre utiliser une variable intermédiaire ou enchaîner les appels de méthode directement dépend de la lisibilité et des préférences du développeur.
    Je pensais déjà beaucoup utiliser de méthodes à la chaîne et nuire déjà pas mal à la lisibilité.
    fin de ligne et # sont ASCII. Tant qu'à y aller en mode binaire le decode('utf-8') est superflu: ligne_bin.strip().startswith(b'#') suffit (tant qu'on oublie pas le b'...').

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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreur Return sans Gosub
    Par TBMB51 dans le forum IHM
    Réponses: 2
    Dernier message: 20/12/2013, 20h20
  2. RmDir() violation de partage apparemment sans raison
    Par bvsud dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 21/12/2008, 22h39
  3. Function sans Return
    Par Danyel dans le forum VB.NET
    Réponses: 5
    Dernier message: 02/05/2008, 17h10
  4. a quoi sert un return sans rien après ?
    Par harlock59 dans le forum C
    Réponses: 11
    Dernier message: 17/01/2006, 10h14
  5. Réponses: 5
    Dernier message: 24/05/2005, 10h09

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