#1 Le 20/09/2007, à 11:05
- alteo_gange
[résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Bonjour!
Je suis en train de lire le livre "Apprendre à programmer avec Python" de G. Swinnen (édition O'Reilly). J'en suis au chapitre 16 sur les bases de données. Je ne peux pas installer le SGBDR Gadfly (erreur pour le test sous ubuntu feisty). Avez-vous déjà rencontré le problème?
alteo_gange@ubuntu:~/bureau/gadflyZip$ python run_tests
Traceback (most recent call last):
File "run_tests", line 9, in <module>
go()
File "/home/romain/bureau/gadflyZip/test/__init__.py", line 35, in go
l.append(test_mods[name].suite())
AttributeError: 'module' object has no attribute 'suite'
Dernière modification par alteo_gange (Le 21/09/2007, à 09:04)
Hors ligne
#2 Le 20/09/2007, à 14:51
- bipede
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Il me semble me souvenir que le run_tests de gadfly ne fonctionnait pas, mais que ça n'empêchait pas l'installation.
Toutefois, un SGBDR beaucoup plus puissant est maintenant fourni avec python (depuis la 2.5) qui est sqlite3.
Je te conseille de transposer les exercices de Swinnen avec sqlite3, les fonctionnalités étant assez proche.
Pour utiliser sqlite3 :
import sqlite3
db = sqlite3.connect("MyBase")
cur = db.cursor()
Desktop: MSI - Intel® Core™ i5-3330 CPU @ 3.00GHz × 4 - RAM 8 go- Kubuntu 21.04 - Système sur SSD 64 Go - /home sur HDD 500 Go.
Laptop: DELL Inspiron-15 3567 - Intel® Core™ i5-7200 CPU @ 2.50GHz × 4 - RAM 8 go - HDD 1 To - Ubuntu 20.10 avec /home séparé.
Mon site: Les contributions du bipède
Hors ligne
#3 Le 20/09/2007, à 15:57
- orlan
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Je confirme, j'ai suivi le Swinnen avec sqlite, et à part la méthode de connection / création de BD (plus pratique avec sqlite), toutes les autres méthodes évoquées par le cours sont identiques entre gadfly et sqlite.
Hors ligne
#4 Le 20/09/2007, à 16:06
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Ok, merci Bipede!
Je verrai ça ce soir.
J'installerai python2.5-sqlite et vérifierai si les méthodes gadfly portent le même nom sous sqlite.
ex: execute(), commit(), pp(), close()
C'est tout ce que je vois à priori.
Hors ligne
#5 Le 20/09/2007, à 17:03
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Je confirme, j'ai suivi le Swinnen avec sqlite, et à part la méthode de connection / création de BD (plus pratique avec sqlite), toutes les autres méthodes évoquées par le cours sont identiques entre gadfly et sqlite.
Je n'avais pas vu ton message. Merci. Je m'y mets!
Hors ligne
#6 Le 20/09/2007, à 17:59
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Ça marche plutôt bien à part la méthode pp() gérant l'affichage pré-formatée qui n'est pas reconnue.
import sqlite3
from os import chdir
chdir("/home/romain/docs/langages/python/")
db = sqlite3.connect("Base")
cur = db.cursor()
cur.execute("create table membres (age integer, nom varchar, taille float)")
cur.execute("insert into membres(age, nom, taille) values (21,'Dupont',1.83)")
cur.execute("INSERT INTO MEMBRES(AGE, NOM, TAILLE) VALUES (15,'Suleau',1.57)")
cur.execute("Insert Into Membres(Age, Nom, Taille) Values (18,'Forcas',1.69)")
cur.execute("select * from membres")
print cur.pp()
>>> cur.execute("select * from membres")
<sqlite3.Cursor object at 0xb7d2c020>
>>> print cur.pp()
Traceback (most recent call last):
Par contre fetchall() marche bien.
cur.execute("select * from membres")
for x in cur.fetchall():
print x[0], x[1], x[2]
21 Dupont 1.83
15 Suleau 1.57
18 Forcas 1.69
Hors ligne
#7 Le 20/09/2007, à 18:02
- orlan
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Ah oui, j'avais oublié la méthode pp(). Je n'ai pas trouvé d'équivalent dans sqlite...
Hors ligne
#8 Le 20/09/2007, à 18:48
- aleph
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
> alteo_gange
Python/sqlite3 : on doit faire comme ça:
...
t = (21, 'Dupont', 1.83)
ur.execute("insert into membres values (?, ?, ?)")
t = (15, 'Suleau',1.57)
ur.execute("insert into membres values (?, ?, ?)")
t = (18,'Forcas',1.69)
ur.execute("insert into membres values (?, ?, ?)")
...
N'étant pas un spécialiste des BD, je ne peux t'expliquer le pourquoi.
Manuels officiels Python 2.5.1
13.13 sqlite3 -- DB-API 2.0 interface for SQLite databases
...
Usually your SQL operations will need to use values from Python variables. You shouldn't assemble your query using Python's string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack.
Instead, use the DB-API's parameter substitution. Put "?" as a placeholder
...
Petite astuce, si tu veux te faire la main, tu peux utiliser une base en mémoire (RAM)
db = sqlite3.connect(":memory:")
#9 Le 20/09/2007, à 18:57
- aleph
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Erratum: j'ai oublié les tuples t
...
t = (21, 'Dupont', 1.83)
cur.execute("insert into membres values (?, ?, ?)", t)
t = (15, 'Suleau',1.57)
cur.execute("insert into membres values (?, ?, ?)", t)
t = (18,'Forcas',1.69)
cur.execute("insert into membres values (?, ?, ?)", t)
...
#10 Le 21/09/2007, à 09:02
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Erratum: j'ai oublié les tuples t
... t = (21, 'Dupont', 1.83) cur.execute("insert into membres values (?, ?, ?)", t) t = (15, 'Suleau',1.57) cur.execute("insert into membres values (?, ?, ?)", t) t = (18,'Forcas',1.69) cur.execute("insert into membres values (?, ?, ?)", t) ...
Merci j'en ai eu besoin pour construire une base de données à partir d'une liste de tuples et d'une boucle for. D'après ce que je savais, j'aurais tenté un truc du genre (en simplifiant):
t = (21, 'Dupont', 1.83)
cur.execute("insert into membres values %?", %(t))
où '?' serait à remplacer par une lettre.
db = sqlite3.connect(":memory:")
Intéressant!
Pour remplacer "print cur.pp()" j'ai du écrire:
for i in cur.fetchall():
for j in i:
print j,
print ""
Il n'y a pas de méthode dédiée au formatage rapide dans le module sqlite3, c'est sûr. Je suis allé voir les méthodes de Cursor: ">>> help(sqlite3)".
Hors ligne
#11 Le 21/09/2007, à 09:25
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Pour remplacer "print cur.pp()" j'ai du écrire:
for i in cur.fetchall(): for j in i: print j, print ""
Avec des tabulations c'est plus joli mais pas parfait:
for i in cur.fetchall():
for j in i:
print "%18s" %(j),
print ""
Hors ligne
#12 Le 21/09/2007, à 10:12
- bipede
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Ci-dessous un petit exemple de formatage:
import sqlite3 as sqlite
base = sqlite.connect(":memory:")
c = base.cursor()
req = "CREATE TABLE personnes (nom TEXT, age INTEGER)"
c.execute(req)
personnes = (
("Dupont", 53),
("Durant", 34),
)
c.executemany("INSERT INTO personnes (nom, age) VALUES(?, ?)", personnes)
c.execute("SELECT * FROM personnes ORDER BY age, nom")
# Impression d'un entete.
for colonne in c.description:
print colonne[0].ljust(20) ,
print # Terminer l'entete sur une nouvelle ligne.
print '-' * 78
iterations = range(len(c.description))
for row in c:
for iter in iterations:
valeur = str(row[iter])
print valeur.ljust(20) ,
print # terminer la ligne sur une nouvelle ligne.
Desktop: MSI - Intel® Core™ i5-3330 CPU @ 3.00GHz × 4 - RAM 8 go- Kubuntu 21.04 - Système sur SSD 64 Go - /home sur HDD 500 Go.
Laptop: DELL Inspiron-15 3567 - Intel® Core™ i5-7200 CPU @ 2.50GHz × 4 - RAM 8 go - HDD 1 To - Ubuntu 20.10 avec /home séparé.
Mon site: Les contributions du bipède
Hors ligne
#13 Le 21/09/2007, à 10:40
- aleph
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
> alteo_gange
> Merci j'en ai eu besoin pour construire une base de données à partir d'une liste de tuples et d'une boucle for. D'après ce que je savais, j'aurais tenté un truc du genre (en simplifiant):
t = (21, 'Dupont', 1.83)
cur.execute("insert into membres values %?", %(t))
où '?' serait à remplacer par une lettre.
---
Non, le point d'interrogation ne sert pas à ça. Il représente la "case" d'une table dans laquelle un élément du tuple (ici t) sera mis ou lu. Si tu veux, il y a une bijection entre les "?" et les éléments du tuple.
Si les éléments de ton tuple, sont des variables, par ex. string, que tu dois programatiquement manipuler, il faut le faire avant de définir t.
Je répète à nouveau, je ne sais pas pourquoi, Python doit le faire ainsi, mais je sais que c'est la façon correcte de travailler.
> Pour remplacer "print cur.pp()" j'ai du écrire:
Ce n'est quand même pas une grosse corvée. Le module sqlite3 contient tout ce qu'il faut pour écrire ses propres méthodes pp(), row_factory, text_factory
---
Je ne suis vraiment pas un spécialiste des bases de données, par contre je connais assez bien Python, il se trouve que par hasard, j'ai eu à faire il y a quelques jours à sqlite3. En lisant la doc officielle, je m'en suis très bien sorti et très rapidement.
Bref, ceci vaudra toutes les explications que je pourrais donner.
http://docs.python.org/lib/module-sqlite3.html
Les exemples sont vraiment parlants.
#14 Le 21/09/2007, à 11:32
- aleph
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
> bipede
Outre mes maigres connaissances dans ce domaine, mais en lisant la doc citée, il est facile de créer sa propre représentation d'un "row". Je me souviens d'avoir une fois utilisé une de ces "factory" (text _factory) pour avoir un encodage correct sous DOS (cp850).
Ton code revisité (on peut certainement faire mieux)
# -*- coding: iso-8859-1 -*-
import sqlite3 as sqlite
def out_factory(cursor, row):
s = ''
for idx, col in enumerate(cursor.description):
tmp = str(row[idx])
s += str(row[idx]).ljust(20)
return s
if __name__ == '__main__':
base = sqlite.connect(":memory:")
#####################
base.row_factory = out_factory
#####################
c = base.cursor()
req = "CREATE TABLE personnes (nom TEXT, age INTEGER)"
c.execute(req)
personnes = (
("Dupont", 53),
("Durant", 34),
)
c.executemany("INSERT INTO personnes (nom, age) VALUES(?, ?)", personnes)
c.execute("SELECT * FROM personnes ORDER BY age, nom")
# Impression d'un entete.
for colonne in c.description:
print colonne[0].ljust(20) ,
print # Terminer l'entete sur une nouvelle ligne.
print '-' * 78
#####################
# Affichage d'un row selon out_factory
for row in c:
print row
#####################
#15 Le 22/09/2007, à 11:29
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Aleph et Bipede: votre code marche très bien... sauf quand il y a des accents. J'ai enregistré vos scripts en 2 encodages différents (Latin-1 et Utf-8) avec les en-têtes de fichiers appropriés.
personnes = (
("Duponté", 53),
("Durant", 34),
)
utf-8 résultat script bipede:
nom age
------------------------------------------------------------------------------
Durant 34
Traceback (most recent call last):
File "/home/romain/bureau/prov6.py", line 27, in <module>
valeur = str(row[iter])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
utf-8 résultat script aleph:
nom age
------------------------------------------------------------------------------
Durant 34
Traceback (most recent call last):
File "/home/romain/bureau/prov7.py", line 41, in <module>
for row in c:
File "/home/romain/bureau/prov7.py", line 9, in out_factory
tmp = str(row[idx])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
latin-1 résultat script bipede:
nom age
------------------------------------------------------------------------------
Durant 34
Traceback (most recent call last):
File "/home/romain/bureau/prov8.py", line 26, in <module>
for iter in iterations:
sqlite3.OperationalError: Could not decode to UTF-8 column 'nom' with text 'Dupont�'
latin-1 résultat script aleph:
nom age
------------------------------------------------------------------------------
Durant 34
Traceback (most recent call last):
File "/home/romain/bureau/prov9.py", line 41, in <module>
for row in c:
sqlite3.OperationalError: Could not decode to UTF-8 column 'nom' with text 'Dupont�'
> alteo_gange
> Merci j'en ai eu besoin pour construire une base de données à partir d'une liste de tuples et d'une boucle for. D'après ce que je savais, j'aurais tenté un truc du genre (en simplifiant):
t = (21, 'Dupont', 1.83) cur.execute("insert into membres values %?", %(t))
où '?' serait à remplacer par une lettre.
---
Non, le point d'interrogation ne sert pas à ça. Il représente la "case" d'une table dans laquelle un élément du tuple (ici t) sera mis ou lu. Si tu veux, il y a une bijection entre les "?" et les éléments du tuple.
Si les éléments de ton tuple, sont des variables, par ex. string, que tu dois programatiquement manipuler, il faut le faire avant de définir t.
On s'est mal compris. Le '?' n'avait pas vocation à rester dans le script final.
Je faisait le parallèle avec '%s' pour les chaînes de caractères;
à '%d' pour les entiers;
à '%f' pour les réels;
Mais il n'y a pas de %quelque_chose pour les tuples.
Je ne suis vraiment pas un spécialiste des bases de données, par contre je connais assez bien Python, il se trouve que par hasard, j'ai eu à faire il y a quelques jours à sqlite3. En lisant la doc officielle, je m'en suis très bien sorti et très rapidement.
Bref, ceci vaudra toutes les explications que je pourrais donner.
http://docs.python.org/lib/module-sqlite3.html
Les exemples sont vraiment parlants.
Excellent!
Hors ligne
#16 Le 23/09/2007, à 16:19
- aleph
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
> alteo_gange
... J'ai enregistré vos scripts en 2 encodages différents (Latin-1 et Utf-8) avec les en-têtes de fichiers appropriés. ...
Ah les encodages...
La façon dont un script Python est enregistré dans un fichier (son encodage) n'a rien à voir avec ce que doit faire ce fichier.
Le script que j'ai proposé a été écrit sous Windows et fonctionne très bien avec des caractères non ASCII. Pour parler vrai, j'avais remarqué que le script proposé par b pourrait poser problème, mais je n'en ai pas parlé pour ne pas surcharger le bateau.
La solution de ton problème, lire la doc de Python et comprendre ce b* d'encodage.
Ci-dessous et sans autre forme d'explication une version légèrement modifiée du script qui tient compte de l'encodage de sortie. Correcte, elle n'est *techniquement* pas de bonne facture (on peut, et dans la réalité doit) faire mieux. Elle présente cependant l'avantage d'être pédagogiquement illustrative.
Script écrit sous Windows, testé sous Windows (encodage de sortie cp1252, mais avec un mon éditeur favori dont l'encodage de sortie a été réglé pour être en iso-8859-1), sous DOS (cp850) et sous ubuntu 7.04 (utf-8).
A noter la suppression volontaire de toute déclaration d'encodage dans l'en-tête de fichier.
import sys
import sqlite3 as sqlite
outenc = sys.stdout.encoding
if outenc == None:
outenc = 'iso-8859-1'
print 'outenc:', outenc
def out_factory(cursor, row):
s = ''
for idx, col in enumerate(cursor.description):
tmp = row[idx]
if isinstance(tmp, basestring):
tmp = tmp.encode(outenc, 'replace')
else:
tmp = str(row[idx])
s += tmp.ljust(20)
return s
if __name__ == '__main__':
base = sqlite.connect(":memory:")
base.row_factory = out_factory
c = base.cursor()
req = "CREATE TABLE personnes (nom TEXT, age INTEGER)"
c.execute(req)
personnes = (
(u"Dupont", 53),
(u"Durant", 34),
(u"\xe9l\xe8ve", 34),
(u"\N{LATIN SMALL LETTER E WITH ACUTE}l\N{LATIN SMALL LETTER E WITH GRAVE}ve", 34),
)
c.executemany("INSERT INTO personnes (nom, age) VALUES(?, ?)", personnes)
c.execute("SELECT * FROM personnes ORDER BY age, nom")
# Impression d'un entete.
for colonne in c.description:
print colonne[0].ljust(20) ,
print # Terminer l'entete sur une nouvelle ligne.
print '-' * 78
# Affichage d'un row selon out_factory
for row in c:
print row
input(':')
#17 Le 25/09/2007, à 13:49
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
La solution de ton problème, lire la doc de Python et comprendre ce b* d'encodage.
Ci-dessous et sans autre forme d'explication une version légèrement modifiée du script qui tient compte de l'encodage de sortie. Correcte, elle n'est *techniquement* pas de bonne facture (on peut, et dans la réalité doit) faire mieux. Elle présente cependant l'avantage d'être pédagogiquement illustrative.
Pédagogique pour quelqu'un qui connaît déjà isinstance(), les fonctions appelées sans parenthèses, ljust(), encode, sys.stdout.encoding... toutes ces choses non-invoquées dans les 300 pages du livre de Swinnen.
En programmation qui dit pédagogie qui commentaires.
Et oui, ce b* d'encodage. Ça complique énormément le script. C'est aussi assez galère pour rechercher l'emplacement d'un mot dans un texte. find() compte 1 pour chaque octet, or un caractère accentué est codé sur 2 octets en utf-8. D'où des décalages. Et les encodages ne compliquent pas que les scripts python. Ces b* d'anglais n'ont pas ce problème.
A noter la suppression volontaire de toute déclaration d'encodage dans l'en-tête de fichier.
J'ai ajouté la déclarations de l'en-tête car cela ne fonctionnait pas. Le débogueur python me conseillait alors de lire la page web dont le tire est "Defining Python Source Code Encodings"...
Merci pour ton script, Aleph.
J'ai compris. Si je veux déchiffrer ton script, je lis la doc.
Hors ligne
#18 Le 25/09/2007, à 18:27
- aleph
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
> alteo_gange
Je comprends un peu ton désarroi mais à décharge je ne peux pas non plus être la "nounou" de chaque personne écrivant un script Python.
Il y a une, une seule et unique documentation Python. Elle est révisée à chaque sortie d'une nouvelle version de Python. Elle contient dans sa première partie une excellent tutoriel écrit par le géniteur de Python en personne, GvR. Je l'ai proposé plusieurs fois sur ce forum, seulement les gens vont voir ailleurs. Que veux-tu que je te dise ?
Chaque fois que j'interviens sur ce forum à propos de Python. J'essaie d'être le plus clair possible et de toujours donner des références correctes, comme je l'ai fait pour sqlite. A chaque fois, il y en 20 qui font du rentre dedans à coup de, j'ai lu que...
Je suis très conscient que tout apprentissage, que ce soit Python, cuisine ou tricot n'est pas toujours aisé, mais le minimum que l'on peut faire, c'est de se référer à une documentation correcte.
http://forum.ubuntu-fr.org/viewtopic.php?pid=1099539#p1099539
http://forum.ubuntu-fr.org/viewtopic.php?id=138212&p=3
http://forum.ubuntu-fr.org/viewtopic.php?id=138212&p=4 #89 <<<<<<<
#19 Le 25/09/2007, à 21:35
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Il y a une, une seule et unique documentation Python. Elle est révisée à chaque sortie d'une nouvelle version de Python. Elle contient dans sa première partie une excellent tutoriel écrit par le géniteur de Python en personne, GvR. Je l'ai proposé plusieurs fois sur ce forum, seulement les gens vont voir ailleurs. Que veux-tu que je te dise ?
Il n'y a rien à ajouter. Je te taquinnais un peu sur mon dernier message.
Je suis très conscient que tout apprentissage, que ce soit Python, cuisine ou tricot n'est pas toujours aisé, mais le minimum que l'on peut faire, c'est de se référer à une documentation correcte.
Les pages en anglais n'ont pas trop la côte chez nos compatriotes. On se tape des centaines de pages d'un livre et on se rend compte qu'on est loin de tout maîtriser. La vie est un éternel recommencement.
http://img75.imageshack.us/img75/6812/img1ze7.png
Un problème en moins.
Chaque fois que j'interviens sur ce forum à propos de Python. J'essaie d'être le plus clair possible et de toujours donner des références correctes, comme je l'ai fait pour sqlite. A chaque fois, il y en 20 qui font du rentre dedans à coup de, j'ai lu que...
Tes recommandations de lecture de la doc me rappellent les recommandations que je faisais à mes cousins quand je leur donnaient des exercices à résoudre. Ils se lançaient en lisant vaguement l'énoncer et du coup s'égaraient. S'agit-il de flemme? Besoin de pré-mâché? Adeptes du moindre effort? Ou alors les capacités d'analyse des élèves français ont-t-elles régressées car l'éducation nationale a raté sa massification? Fin du hors-sujet.
Note 2: Cette documentation est en Anglais (la lingua franca de l'informatique). Il n'existe pas de tutoriaux ou bouquins en français qui mettent en avant les points importants des versions modernes de Python, par ex. les "class new style", le type unicode ou l'encodage.
Ok! Et dans la dernière édition du livre de Swinnen, c'est aussi le cas?
http://spinecho.ze.cx/ est tout en anglais. C'est du joli!
Qui est l'auteur de ta citation?
Si un gars venait te voir et te disais qu'il a écrit un programme python de 14000 lignes qui tient sur un fichiers (plus des images annexes et des trucs dans le genre), sans classes, tu lui dirais quoi?
Hors ligne
#20 Le 25/09/2007, à 21:35
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Il me semble me souvenir que le run_tests de gadfly ne fonctionnait pas, mais que ça n'empêchait pas l'installation.
Mais ne serait-ce pas un membre de la liste de diffusion? Qui plus est celui qui m'a recommandé le livre de G. Swinnen. Et A*****?
De retour sur la liste?
Python est assez élégant comme langage.
Hors ligne
#21 Le 26/09/2007, à 10:50
- aleph
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
> alteo_gange
> Ok! Et dans la dernière édition du livre de Swinnen, c'est aussi le cas?
Si tu fais allusion à la version pdf téléchargeabe, cette version malheureusement un peu obsolète ne peut mentionner les aspects "modernes" de Python. Extrait de l'introduction:
"Les exemples de ce livre ont été réalisés les uns après les autres sur une période de temps relativement longue : certains ont été développés sous Python 1.5.2, puis d'autres sous Python 1.6, Python 2.0, Python 2.1, Python 2.2 et enfin Python 2.3."
Je trouve cependant que c'est un bouquin de très bonne facture.
> http://spinecho.ze.cx/ est tout en anglais. C'est du joli!
> Qui est l'auteur de ta citation?
Là, je ne comprends pas.
> Si un gars venait te voir et te disais qu'il a écrit un programme python de 14000 lignes qui tient sur un fichiers (plus des images annexes et des trucs dans le genre), sans classes, tu lui dirais quoi?
Rien. Mais je trouve dommage de ne pas utiliser la modularité de ce langage qui est un de ses grands atouts, tant pour le développement d'une application que pour la possibilité qu'elle offre à des tiers d'écrire des extensions à ce langage.
A l'auteur de la question qui utilise les mots "sans classes". Je répondrais par une question.
D'où tiens-tu que l'on doive faire de la programmation orienté objet avec Python ?
#22 Le 26/09/2007, à 11:08
- bipede
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
A l'auteur de la question qui utilise les mots "sans classes". Je répondrais par une question.
D'où tiens-tu que l'on doive faire de la programmation orienté objet avec Python ?
C'est vrai que la POO avec Python n'est pas obligatoire... Mais mon avis (qui n'engage que moi) est qu'elle est indispensable...
Sinon, pourquoi ne pas être resté à COBOL ?
Plus sérieusement, la POO est la façon de programmer la plus productive et la plus simple à maintenir qui soit. D'ailleurs Python ne fait pas de l'objet... Python est objet...
Desktop: MSI - Intel® Core™ i5-3330 CPU @ 3.00GHz × 4 - RAM 8 go- Kubuntu 21.04 - Système sur SSD 64 Go - /home sur HDD 500 Go.
Laptop: DELL Inspiron-15 3567 - Intel® Core™ i5-7200 CPU @ 2.50GHz × 4 - RAM 8 go - HDD 1 To - Ubuntu 20.10 avec /home séparé.
Mon site: Les contributions du bipède
Hors ligne
#23 Le 26/09/2007, à 12:50
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
> alteo_gange
> Ok! Et dans la dernière édition du livre de Swinnen, c'est aussi le cas?
Si tu fais allusion à la version pdf téléchargeabe, cette version malheureusement un peu obsolète ne peut mentionner les aspects "modernes" de Python
Je faisais référence à la version non disponible en pdf.
Je suis allé sur le site de l'éditeur:
La version proposée ici [en pdf] correspond à en tous points à la seconde édition de l'ouvrage publiée par O'Reilly en Mai 2005 (410 pages).
[...]
Alors que son prix de vente a été réduit de 4 €, la nouvelle édition a été augmentée de 120 pages :
Un nouveau chapitre consacré à l'analyse de programmes concrets permet de consolider et de synthétiser les connaissances acquises.
Le chapitre sur les bases de données aborde désormais l'interfaçage avec une base de données MySQL.
Le chapitre qui dans la première Èdition se limitait à l'étude de CGI expose à présent diverses possibilités de programmation web.
La programmation multitâches est abordée dans une nouvelle section du chapitre dédié aux communications à travers un réseau.
Apparemment il ne contient pas plus d'informations sur l'encodage. Mais python n'avait peut-être pas encore améliorer sa gestion des encodages à l'époque (mai 2005)
> http://spinecho.ze.cx/ est tout en anglais. C'est du joli!
> Qui est l'auteur de ta citation?Là, je ne comprends pas.
Les 2 phrases sont indépendantes.
"L'Homme le plus libre est celui qui a le plus de relations avec ses semblables."
Cette citation convient bien à notre culture occidentale... moins à d'autres.
Je trouve cependant que c'est un bouquin de très bonne facture.
C'est un modèle de pédagogie.
Si un gars venait te voir et te disais qu'il a écrit un programme python de 14000 lignes qui tient sur un fichiers (plus des images annexes et des trucs dans le genre), sans classes, tu lui dirais quoi?
Rien. Mais je trouve dommage de ne pas utiliser la modularité de ce langage qui est un de ses grands atouts, tant pour le développement d'une application que pour la possibilité qu'elle offre à des tiers d'écrire des extensions à ce langage.
A l'auteur de la question qui utilise les mots "sans classes". Je répondrais par une question.
D'où tiens-tu que l'on doive faire de la programmation orienté objet avec Python ?
C'est un choix, un paradigme comme on dit dans le jargon.
G. Swinnen a vivement conseillé à ses lecteurs de programmer avec des objets dans des projets d'une certaine importance. Certains élément m'amènent à penser qu'il a raison:
- la POO évite de jongler avec des variables globales, sources d'erreurs dans un long programme. Les variables d'un objet sont protégés de l'extérieur (ce n'est pas tout à fait le cas avec python mais si on suit les bonne pratiques de la POO, pas de soucis), ce qui limite les accidents et facilite le déboguage.
- la POO me semble plus susceptible de rendre lisible un programme. Il serait mieux structuré (en tout cas quand il est écrit dans un seul fichier).
- j'aurais bien du mal à programmer un jeu à plusieurs sans la POO. Dans ce cas un joueur peut correspondre à un objet. C'est pratique.
- plus grande modularité...
Évidemment pour un petit script isolé on va au plus simple et la POO est superflux.
Il est difficile de vraiment saisir les avantages et les inconvénients de la POO et de la programmation procédurale. Le mieux serait de faire un programme assez compliqué en POO et de créer son équivalent en programmation procédurale. C'est peut-être la seule critique que je ferais du livre de Swinnen.
Zut, je viens de m'apercevoir qu'une nouvelle version pdf est apparue. Sur le fond, c'est pareil. Mais sur la forme, les caractères sont beaucoup plus lisible. Un peu tard pour moi.
Hors ligne
#24 Le 26/09/2007, à 12:50
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
C'est vrai que la POO avec Python n'est pas obligatoire... Mais mon avis (qui n'engage que moi) est qu'elle est indispensable...
Heu, me serais-je trompé? Tu n'es pas A***** alias Pyrog, l'auteur de EKD? Ton message me fait douter.
Plus sérieusement, la POO est la façon de programmer la plus productive et la plus simple à maintenir qui soit. D'ailleurs Python ne fait pas de l'objet... Python est objet...
Python est objet? Pour java oui car le moindre script sous ce langage ne peut se concevoir hors d'une classe (au moins la classe principale main).
Hors ligne
#25 Le 26/09/2007, à 12:53
- alteo_gange
Re : [résolu] gadfly & "Apprendre à programmer avec Python" de G. Swinnen
Zut, je viens de m'apercevoir qu'une nouvelle version pdf est apparue. Sur le fond, c'est pareil. Mais sur la forme, les caractères sont beaucoup plus lisible. Un peu tard pour moi.
Je nuance. Le code python du nouveau pdf est affreux.
Hors ligne