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 :

Premiers pas sous Python


Sujet :

Python

  1. #21
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    @dividee
    Citation Envoyé par dividee Voir le message
    @kango:
    écrire
    créera toujours un nouvel objet, que a soit mutable ou non. Enfin, le programmeur qui définit la méthode __add__ de la classe fait ce qu'il veut, mais l'implémenter d'une façon qui modifie a serait une aberration, en contradiction totale avec la sémantique de l'addition.

    Par contre pour
    cela va dépendre. L'objet référencé par a ne sera modifié que si la méthode __iadd__ est définie dans la classe de a pour effectuer l'opération en place.
    oui je suis entièrement d'accord avec ça, l'opération d'affectation crée un nouvel objet en mémoire (sauf dans le cas des singleton) mon exemple était mal choisi, j'aurais dû mettre a += 1.

    @eyquem:
    Et j’attends de voir un code avec définition de __iadd__ qui va donner la même adresse.
    Je pense que dividee faisait allusion à mon message:

    créera automatiquement un nouvel objet en mémoire, et ce quelque soit le type de a (muable ou non muable).

    en revanche:

    ne crée un nouvel objet en mémoire que si a est non muable (un entier par exemple). C'est donc précisemment cet exemple que j'aurais dû fournir (pour mettre en relation la modification 'in-place' d'un type muable et d'un type non-muable).

    En effet, pour un muable (une liste) c'est la même zone mémoire qui continue d'être utilisée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> a = []
    >>> id(a)
    140076096098176
    >>> a += [1]
    >>> a
    [1]
    >>> id(a)
    140076096098176
    >>> a = a + [2]
    >>> id(a)
    140076096259496
    Donc dividee a raison dans le sens ou la distinction entre type muable et non muable n'opére que lors d'une opération sur un objet mais pas à l'affectation (opérateur =). Dans ce dernier cas, seul le cas du singleton sera différent. Et ceci se mêle à ce que fait Python pour limiter la création d'objet en mémoire, ainsi, sur ma version de Python (2.6.4 64bits sur Ubuntu 9.04 64bits):

    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
    18
    >>> c = 1
    >>> d = 1
    >>> c is d
    True
    #c'est Python qui décide !, l'affectation d = 1 ne crée pas un nouvel objet en mémoire. 
    #mais cela peut être différent avec d'autres versions (ou implémentation ?) de Python.
    >>> a = None
    >>> b = None
    >>> a is b
    True
    #ça se sera toujours le cas puisque None est un singleton (il n'existe qu'un seul et 
    #unique objet de ce type au cours de l'exécution du programme). Les singleton ne se 
    #limitent pas à None, on peut créer les nôtres :).
    >>> e = []
    >>> f = []
    >>> e is f
    False
    #ça sera toujours le cas aussi car les listes sont muables :)
    Oala, je pense qu'à la nomenclature près on est d'accords sur la mécanique sous-jacente . Comme eyquem, je ne suis pas fan de la dénomination 'variable' je trouve qu'elle a tendance à apporter confusion pour des gens venant d'autres langages, c'est pour cela que j'ai appelé ça "nom" ou "étiquette" mais si "étiquette" est peut être plus parlant, il ne trouve pas d'échos dans les documentations officielles, "nom" en revanche pourrait coller.

  2. #22
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 32
    Points
    32
    Par défaut
    eyquem wrote : "À partir de là, tout devient simple (...)"
    A ce moment de la lecture, je n'ai su que faire : rire nerveusement ou pleurer ?

    Imaginez la scène : [un oeil à demi fermé, la paupière palpitante, une veine gonflée sur le front, de la bave à la commissure des lèvres, des tremblements incontrôlés]

    La réponse doit être 42. Non ?




    Sinon, heureusement que j'ai fait le choix d'un langage clair. Faut pas demander le reste si déjà ils n'arrivent pas à "nommer" les choses, à leur donner une signification propre qui n'admette aucun contresens. Bon, avec l'exposé de eyquem, je pense avoir saisi le truc sur a et b.

    Ce sont des conteneurs, tous. Ensuite, ce qu'on met dedans peu importe, mais pour être concret :

    conteneur A = fruits
    conteneur B = conteneur A
    conteneur A = légumes

    On dit :
    - mettons des fruits dans le conteneur A
    - mettons le même type de fruits dans le conteneur B
    - remplaçons les fruits du conteneur A par des légumes

    Du coup, le conteneur B contient toujours des fruits.

    J'espère que c'est ça, sinon j'ai rien capté, ce qui m'inquiète pour la suite.

  3. #23
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    ne t'en fais pas, tu n'as pas besoin de saisir la substantifique moelle de tout ça de suite c'est un détail de l'implémentation du langage qui ne sert qu'à avoir une compréhension "fine" de ce qui se passe.

    cette abstraction, aussi complexe parait elle, est justement là pour faciliter bien des choses (tu n'auras pas à "jouer" avec des pointeurs en Python par exemple) dans certains cas bien précis, ne pas la comprendre, peut être source de confusion. Mais en fait tout est d'une implacable logique. C'est comme les pointeurs, au début on ne comprend pas mais dès qu'on a saisi, tout s'éclaire et devient logique. Dans les langages utilisant massivement ces pointeurs, on n'a pas le choix de comprendre la mécanique complexe, en Python, on a le choix.

    ce sujet est le plus complexe à assimiler, tout le reste, coule de source

  4. #24
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 630
    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 630
    Points : 30 860
    Points
    30 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par .Nawak Voir le message
    A ce moment de la lecture, je n'ai su que faire : rire nerveusement ou pleurer ?

    Imaginez la scène : [un oeil à demi fermé, la paupière palpitante, une veine gonflée sur le front, de la bave à la commissure des lèvres, des tremblements incontrôlés]

    La réponse doit être 42. Non ?

    T'inquiète pas. Je fais du Python depuis 3 ans et j'ai eu du mal à tout lire. Mais c'est un superbe exposé. Peut-être un poil trop "académique" mais chapeau à eyquem qui a eu le courage et la force d'écrire tout ça.


    Citation Envoyé par .Nawak Voir le message
    Ce sont des conteneurs, tous. Ensuite, ce qu'on met dedans peu importe, mais pour être concret :

    conteneur A = fruits
    conteneur B = conteneur A
    conteneur A = légumes

    On dit :
    - mettons des fruits dans le conteneur A
    - mettons le même type de fruits dans le conteneur B
    - remplaçons les fruits du conteneur A par des légumes

    Du coup, le conteneur B contient toujours des fruits.

    J'espère que c'est ça, sinon j'ai rien capté, ce qui m'inquiète pour la suite.
    Non pas "peu importe". Cela dépend de ce que tu y mets.

    Je vais essayer de t'aider à comprendre mais ce sera avec des mots à moi. Pas forcément les bon termes pour le puriste mais j'espère qui t'aideront à mieux saisir les problèmes possibles de ce superbe langage et la façon de les éviter...

    Dans Python, tu as d'abord la possibilité de mémoriser des trucs simples. Des nombres entiers ou flottants. C'est suffisant pour celui qui utilise Python pour compter ses slips et ses chaussettes et leur prix individuel
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> a=5
    >>> b=a
    >>> a
    5
    >>> b
    5
    >>>
    Dans ce cas, tu as le droit de "considérer" que les deux identificateurs "a" et "b" sont indépendants. Que ce soit vrai ou pas à ce niveau importe peu. De toute façon, si tu commences à travailler comme si c'était vrai, alors Python s'arrangera pour que ça le soit
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a+=1
    >>> a
    6
    >>> b
    5
    >>>
    Et donc maintenant tu vois bien que les deux identificateurs ont chacun leur vie à vivre. Et que ce fut vrai ou pas juste avant importe peu pour le programmeur qui s'en sert pour compter ses noix.

    Ensuite, tu as possibilité de stocker des éléments plus complexes comme les listes ou les dictionnaires (on reste toutefois dans le cadre d'éléments modifiables)
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> a=range(5)
    >>> b=a
    >>> a
    [0, 1, 2, 3, 4]
    >>> b
    [0, 1, 2, 3, 4]
    >>>
    Dans ce cas, tu n'as pas le droit de considérer que t'as deux listes distinctes. En fait, tu n'en as qu'une seule en mémoire et les deux identificateurs "a" et "b" identifient la même liste. Et donc modifier un des éléments influera sur l'autre
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> a[2]='f'
    >>> b[3]='g'
    >>> a
    [0, 1, 'f', 'g', 4]
    >>> b
    [0, 1, 'f', 'g', 4]
    >>>
    Une fois que tu gardes ça en tête, tu n'as plus de problème de programmation. Et bien entendu, dans le cas où t'aurais besoin d'obtenir une réelle copie de "a", tu as des outils qui te permettent de spécifier ce besoin
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> a=range(5)
    >>> b=list(a)
    >>> c=[x for x in a]
    >>> a[2]='f'
    >>> b[3]='g'
    >>> c[4]='h'
    >>> a
    [0, 1, 'f', 3, 4]
    >>> b
    [0, 1, 2, 'g', 4]
    >>> c
    [0, 1, 2, 3, 'h']
    >>>
    Enfin il y a les objets non modifiables, comme les strings ou les tuples. Dans ce cas, comme tu ne peux pas les modifier, le problème de savoir si deux identificateurs identifient le même objet ou pas importe peu. Tu t'en sers et puis c'est tout.

    PS:

    Attention toutefois à pas pousser mémé dans les orties quand on s'amuse avec les identificateurs car sinon, on peut en baver pour démêler la pelote
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> a=range(5)
    >>> a[2]=a
    >>> a
    [0, 1, [...], 3, 4]
    >>> a[2]
    [0, 1, [...], 3, 4]
    >>> a[2][2]
    [0, 1, [...], 3, 4]
    >>> a[2][2][2]
    [0, 1, [...], 3, 4]
    >>> # Je crois qu'on peut aller très loin...
    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. #25
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Sve@r, ton dernier exemple me fait penser à une sympathique implémentation pour un buffer circulaire:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    class FullBufferError(Exception): pass
    class EmptyBufferError(Exception): pass
     
    class CircularBuffer(object):
        def __init__(self, size):
            self._begin = [None]
            cur = self._begin
            for _ in xrange(size):
                cur.append([None])
                cur = cur[1]
            cur.append(self._begin)
            self._end = self._begin
     
        def add(self, value):
            if self._end[1] is self._begin:
                raise FullBufferError()
            self._end[0] = value
            self._end = self._end[1]
     
        def pop(self):
            if self._begin is self._end:
                raise EmptyBufferError()
            value, self._begin = self._begin
            return value
     
        def __del__(self):
            # casse la circularité
            self._end[1] = None
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    >>> c = CircularBuffer(2)
    >>> c.add(1)
    >>> c.add(2)
    >>> c.add(3)
    Traceback (most recent call last):
      File "<interactive input>", line 1, in <module>
      File "C:\Prog\python\Script1.py", line 16, in add
        raise FullBufferError()
    FullBufferError
    >>> c.pop()
    1
    >>> c.add(3)
    >>> c._begin
    [2, [3, [1, [...]]]]
    >>> c._end
    [1, [2, [3, [...]]]]
    >>> c.pop()
    2
    >>> c.pop()
    3
    >>> c.pop()
    Traceback (most recent call last):
      File "<interactive input>", line 1, in <module>
      File "C:\Prog\python\Script1.py", line 22, in pop
        raise EmptyBufferError()
    EmptyBufferError
    >>> c._begin
    [1, [2, [3, [...]]]]
    >>> c._end
    [1, [2, [3, [...]]]]
    C'est un bon exercice pour comprendre les références...

  6. #26
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Je débute en programmation et je tente de m'intéresser à Python.
    Il y a quelques années, j'ai bien touché un peu à l'assembleur sur mon Oric1, puis Atmos et après, mon 520 modifié au fer à soudé en 1040STF. En ce temps là, c'était beaucoup plus simple.
    Aussi, je vous prie d'être indulgent si je raconte des co..eries.
    Pour esayer de synthétiser ce que j'ai compris de la magistrale explication de Equyem.
    Les identifiants (A,x,y...) sont en fait un peu comme les tags de Firefox (j'aime bien Firefox aussi )
    On colle une, ou plusieurs étiquettes sur l'enveloppe qui contient l'adresse de la boîte qui contient l'objet/l'enveloppe qui contient les adresses des objets. Pour ce dernier point, il s'agit d'une supposition de ma part.
    Ainsi, si on colle notre étiquette sur une autre enveloppe, on est forcément dirigé sur une autre boîte qui ne peut contenir le même objet que précédemment. Sauf si cet objet a été détruit/retiré puis recréé/remis dans la nouvelle boite entre temps (s'il a déménagé, quoi).
    En fait, on prend une enveloppe A6 et on écrit une adresse dessus pour que le facteur fasse son boulot.
    Bon, c'est très imagé.

  7. #27
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Euh...
    Citation Envoyé par _Serge_ Voir le message
    On colle une, ou plusieurs étiquettes sur l'enveloppe qui contient l'adresse de la boîte qui contient l'objet/l'enveloppe qui contient les adresses des objets.
    L'étiquette, c'est une métaphore pour quoi ? Le nom de la variable ?
    Et d'habitude, on écrit une adresse sur une enveloppe, pas dedans...
    Ainsi, si on colle notre étiquette sur une autre enveloppe, on est forcément dirigé sur une autre boîte qui ne peut contenir le même objet que précédemment. Sauf si cet objet a été détruit/retiré puis recréé/remis dans la nouvelle boite entre temps (s'il a déménagé, quoi).
    Là je suis complètement perdu
    En fait, on prend une enveloppe A6 et on écrit une adresse dessus pour que le facteur fasse son boulot.


    Je vais essayer une autre métaphore, disons un tableau blanc. Cela représente la mémoire de l'ordinateur. Ou plutôt la partie accessible au process Python.

    Sur ce tableau, vous pouvez afficher des avis (ce sont les objets) qui sont maintenus par un où plusieurs magnets, sur lesquels on colle un étiquette (ce sont les variables, sur l'étiquette il y a le nom de la variable). On pourrait aussi utiliser des punaises, mais c'est moins bien, ça fait des trous dans les objets

    Déposer un magnet sur un avis, c'est l'opération d'assignation. On peut mettre plusieurs magnets sur un même avis, c'est la métaphore de ce qu'on appelle "l'aliasing", avoir plusieurs noms pour un objet. Mais si on retire le dernier magnet, l'avis tombe dans la poubelle qui se trouve en-dessous (l'objet est détruit, le compteur de référence arrive à 0).

    Là où ça se complique, c'est qu'un objet contient des attributs, qui sont en quelque sorte des variables attachées à cet objet. C'est un peu comme si, sur un avis, on avait sur la face arrière des petits magnets attachés dans le papier qui peuvent servir à faire tenir d'autres avis en-dessous. Mais, et c'est là que la métaphore se casse la gueule, qui ne seraient pas suffisants à faire tenir l'avis qui les contient en place s'il n'y a pas un magnet qui le tient en place par au-dessus Mais admettons cette incongruité de la physique pythonienne.

    On peut donc imaginer un tableau rempli d'avis mais maintenus par un seul magnet sur l'avis qui est au-dessus de tous les autres. Si on enlève ce magnet-là, toute la structure se casse la gueule récursivement.

    Maintenant, les références circulaires: on peut imaginer trois avis, A, B et C, qui disposent chacun d'un magnet en-dessous, et qui se recouvrent partiellement, de sorte que A maintienne B, B maintienne C et C maintienne A. Bingo, ça tient en place tout seul vu que chaque avis est maintenu par un magnet au-dessus de lui. On peut même y arriver avec 2 avis, si rien ne les oblige à avoir une forme rectangulaire. S'il n'y a pas de magnet étiqueté dessus, on ne peut plus y accéder (pour y accéder on doit pouvoir les nommer, soit directement grâce aux étiquettes sur les magnets ("l'avis sous le magnet étiquetté A", soit indirectement "l'avis sous le second magnet de l'avis sous le magnet étiquetté B"). Dans ce cas, ces objets en références circulaires utilisent de la place sur le tableau pour rien. Le seul capable de les enlever, c'est votre collègue GC, qui passe de temps en temps, quand il veut bien et qu'il n'est pas en congé-maladie, pour retirer ces saletés du tableau.

    Bon je m'emballe un peu
    Les métaphores imagées, c'est fun mais je suis pas sûr que ça aide beaucoup à la compréhension

  8. #28
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 630
    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 630
    Points : 30 860
    Points
    30 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dividee Voir le message
    Les métaphores imagées, c'est fun mais je suis pas sûr que ça aide beaucoup à la compréhension
    Mouais.

    Désolé __Serge__, essaye plutôt de lire mon explication avec des exemples concrets, je pense sincèrement qu'elle est plus simple et te permettra de te lancer dans Python sans te faire des noeuds au cerveau. Ou mieux, télécharge le superbe tuto de Swinnen et lis le tranquillement en tapant les exemples qui s'y trouvent...
    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]

  9. #29
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Ouais, faut bien rigoler un peu.
    Bon, le coup des magnets n'est pas forcément judicieux puisque d'après ce que j'ai compris on ne peut pas les coller directement sur les avis. Les magnets sont simplement collés ailleurs sur le tableau, sur un avis qui indique l'emplacement de l'objet sur le tableau blanc ou des autres avis qui indiquent...
    L'avantage c'est que lorsque le dernier magnet d'un avis est retiré, on est pas obligé de nettoyer le tableau pour retirer l'objet qui ne sert plus (sinon on passerait son temps à nettoyer) simplement lorsque l'on pose un nouvel avis, on s'assure de mettre un nouvel objet à la place du vieux.

    OK, je sors.

  10. #30
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 32
    Points
    32
    Par défaut
    Re,

    Bon, le bouquin n'est pas adapté à ma vision des choses. Beaucoup trop de verbiage, et peu d'exemples réellement utiles en production. J'aurais aimé voir plus de choses sur la manipulation des chaînes, et une organisation plus pragmatique. On sent que l'auteur est un professeur à l'ancienne, le Maître devant ses élèves, et cela se révèle assez lourd au final. Bref, l'approche du bouquin me déçoit fortement.

    Du coup, je recherche un autre bouquin, plus proches de mes aspirations. Lorsque je jouais un peu avec ActionScript (Flash), j'avais acheté :
    - Actionscript la référence
    - Actionscript en action
    Qui étaient de très bons bouquins. Le premier était une référence du langage, avec chaque mot, sa description, son usage, ses paramètres, et un exemple pratique. Le second s'attardait sur des exemples concrets, en expliquant pourquoi il était plus intelligent de procéder de telle ou telle manière (ex : manipuler un fichier XML et arranger les chaînes à sa guise, faire une pause dans un programme en attente d'un évènement, etc.).

    Est-ce que cela existe ?
    Je pense fortement à acheter "Dive into Python", qui m'a l'air bien plus "carré".
    Dive into Python 3: Amazon.fr: Mark Pilgrim: Livres en anglais@@AMEPARAM@@http://ecx.images-amazon.com/images/I/51WqvTbtj3L.@@AMEPARAM@@51WqvTbtj3L

    Sinon, je me suis trouvé un projet pour apprendre. Pour le boulot, je reçois mes plannings de RV clients par internet. Seulement, la mise en page est déplorable concernant l'impression. Hors, dernièrement, les dev. nous ont pondu un flux XML (mal fichu, mais bon...).

    Je compte donc tenter un script qui :
    - ouvre une connexion openvpn avec le certificat adéquat
    - récupère le fichier XML et le copie dans un fichier local de travail
    - nettoie le bordel (faut voir l'organisation des données "à l'arrache").
    - conserve les éléments utiles
    - sort un fichier texte prêt à imprimer

    Et ce n'est pas avec le bouquin que j'ai acheté que je m'en sortirais. Il manque la blinde de références et d'exemples orientés "métier" (franchement, faire 2 tanks qui se tirent dessus... non, mais plutôt que d'apprendre à parser un fichier XML ou nettoyer des chaînes de caractères...).

    Si vous avez des indications ou pistes pour orienter mes recherches, je vous en remercie par avance.

  11. #31
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Le livre de Swinnen est destiné aux débutants en programmation; c'est un livre pour apprendre les bases de la programmation, comme son titre l'indique, python étant un moyen au service de ce but. Mais ce n'est visiblement pas ce qu'il te faut.

    "Dive into Python" te conviendra sans doute mieux, effectivement. Je suppose que tu as vu qu'il était lui aussi disponible en ligne ? (http://diveintopython3.org/). Même si tu préfères la version papier, cela permet de le feuilleter tranquillement pour voir s'il te convient.

    Cela dit, la bibliothèque standard de python est tellement étendue, sans même parler des bibliothèques tierces, qu'aucun livre ne pourrait tout couvrir. A un moment, il faut bien se contenter de la documentation des librairies. La facilité qu'on a à expérimenter interactivement est aussi une bénédiction.

  12. #32
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 32
    Points
    32
    Par défaut
    Le livre de Swinnen est destiné aux débutants en programmation; c'est un livre pour apprendre les bases de la programmation.
    Je t'assure être novice en programmation, et ce n'est pas avec ce livre seul qu'on peut avoir des bases solides. Autant les premiers chapitres sont intéressants, autant dès qu'il attaque TKinter, ça devient vite pénible. Quant à la POO, je n'ai fait que survoler, vu les exemples peu inspirés, à mille lieux d'une utilisation courante.


    (...) Mais ce n'est visiblement pas ce qu'il te faut.
    Je confirme.

    A priori, je préfère un dico se concentrant sur l'essentiel du langage, sans rentrer dans les exceptions et menus détails. Quelques exemples pratiques, concrets, montrant du code utile en production et réutilisable. Jouer ensuite aux Lego™(©), brique après brique, quitte à faire des erreurs et à recommencer. Là, avec ce bouquin, j'ai bien quelques éléments de réponse sur la manière d'ouvrir et d'écrire dans un fichier, sur quelques manipulations possibles sur les chaînes, mais ça manque de matière.

    Autrement, je préfère une bonne vieille lecture papier qu'un PDF, pas toujours très pratique.

  13. #33
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 630
    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 630
    Points : 30 860
    Points
    30 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par .Nawak Voir le message
    Autrement, je préfère une bonne vieille lecture papier qu'un PDF, pas toujours très pratique.
    Ouch pauvres arbres
    (moi aussi j'ai imprimé le swinnen)
    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]

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/06/2007, 00h23
  2. Premiers pas dans python
    Par thance dans le forum Général Python
    Réponses: 20
    Dernier message: 13/03/2007, 17h54
  3. premiers pas dans Python - palindrome
    Par tarang dans le forum Général Python
    Réponses: 1
    Dernier message: 31/10/2006, 17h56
  4. Premier pas sous C++
    Par Lachdanan dans le forum C++
    Réponses: 8
    Dernier message: 11/10/2005, 15h39
  5. Réponses: 2
    Dernier message: 14/04/2004, 20h37

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