Académique Documents
Professionnel Documents
Culture Documents
1 sur 11
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Message
Sekigo Le Magnifique
Non, mais, ne vous cassez pas la tte sur ce point. Le python est recommand suivant les acadmies, me semble-t-il. Puis, a reste
une recommandation, pas une obligation, tout comme le fait d'apprendre l'algo par l'informatique.
Python est certainement utilis parce que pas mal utilis dans le milieu scientifique, y a un tas de bibliothque SERIOUS BUSINESS
en math, on peut expdier l'apprentissage des bases du langages en deux heures et c'est interprt pour voir le rsultat en direct.
Puis, c'est sous une licence trs permissive, a permet de ne pas s'embarrasser de contrat ou de licence acheter.
Mais vous n'apprendrez jamais faire un jeu VIDO ou fouiner en mmoire vive en cours de math, a, c'est peu prs sur. On va
pas devenir la soudaine patrie de milliers de Linus Torvald et John Romero.
Sekigo Le Magnifique
Petit disclaimer :
J'ai traduis c et article depuis le blog de pythonconquerstheuniverse. I l conc erne l'utilisation du debugger Python.
I l y aura une suite cet article un peu plus tard, crit par moi-mme, pour expliquer comment un peu automatiser ce dbuggage avec un I DE.
Pourquoi utiliser un debugger alors qu'on peut utiliser l'instruction print ? Parce que, si le code commence devenir gros, des print dans tout les sens, a commence
devenir ingrable. Et surtout, avec un I DE, a devient rudement pratique et intuitif.
Et le debuggage permet d'aller fouiller les objets, les fonctions, d'essayer un tas de machins en temps rel, etc...
J'ignore si ce tutoriel peut s'appliquer en partie gdb, le debugger pour C. Je me souviens qu'on peut lancer Python l'intrieur de celui-ci, mais je n'en sais pas plus.
L'utilisation du debugger n'est pas rserv aux grands pros du python. Mme si vous dbutez en Python, vous pouvez vous en servir.
Et l'utilisation du print n'est pas non plus proscrire totalement, c'est plus pratique dans le cas de petit scripts.
La traduction est "librale". Je ne suis pas Google Translate ni professeur la Sorbonne, j'y ai t l'arrache.
Maintenons, trouvons un endroit o nous aimerions inspecter le code, et insrons le code suivant.
Code:
pdb.set_trace()
16/05/2015 10:32
2 sur 11
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Dans cet exemple, la dernire commande tait n (next), donc vous pouvez la r-excuter tout au long du debuggage en appuyant
uniquement sur Entre.
16/05/2015 10:32
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
La dclaration pdb.set_trace() est rencontre, et vous commencez le debuggage avec le (Pdb) prompt.
Vous pressez n et Entre, pour passer l'tape suivante du code
Vous pressez Entre pour une tape supplmentaire.
Vous pressez Entre pour une tape supplmentaire.
Vous pressez Entre pour une tape supplmentaire, etc...
D'un coup, vous ralisez que vous tes lgrement perdu. Vous n'tes plus trop sr o vous en tes dans le code.
Vous pressez l et appuyer sur Entre. Cela liste la zone du programme o vous vous trouvez.
Vous inspectez l'cran, retrouvez vos repres, et tes prt "repartir".
Vous pressez n et ensuite Entre, pour passer l'tape suivante.
Vous pressez Entre pour une tape supplmentaire.
Vous pressez Entre pour une tape supplmentaire.
Vous pressez Entre pour une tape supplmentaire, etc...
Durant votre navigation via pdb, en utilisant la commande n, dans ce programme, vous vous retrouvez devant une instruction qui
invoque une autre squence d'instructions ici, l'instruction final = combine(a, b) que pdb traite comme tout autre
instruction. C'est dire, l'instruction est execut et vous passez l'instruction suivante ici, print(final).
Supposez qu'il y ait un problme dans cette squence d'instructions. Dans notre cas, supposons que vous suspectiez qu'il y ait un
bug dans la fonction combine(a, b). Ce que vous voulez, c'est pntrer l'intrieur de cette fonction et la dbugger de l'intrieur.
Bien entendu, vous pouvez le faire. Faites cela avec la commande s (pour "step into").
Lorsque vous excutez une instruction qui ne provoque pas d'appel de fonctions, n et s font la mme chose, passer l'tape
suivante du code. Mais lorsque vous excutez une instruction qui invoque une fonction, s, contrairement n, va pntrer DANS
cette fonction.
Dans notre exemple, si vous excutez l'instruction
3 sur 11
16/05/2015 10:32
4 sur 11
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Code:
final = combine(a, b)
en utilisant s, la prochaine instruction que pdb va afficher sera la premire instruction de la squence d'instruction
Code:
def combine(s1, s2):
Maintenant, continuez naviguer en mode "pas--pas" au sein de votre programme. Ou, si vous avec une me d'aventurier
suicidaire, utilisez c pour couper le debugger et voir si le programme explosera quand mme avant la fin !
En faisant cela, pdb va afficher une trange erreur, expliquant qu'il ne peut pas trouver un objet nomm '="BBB"'. Mais pourquoi
????
En fait, pdb va tenter d'excuter la commande "b", qui configure et liste les breakpoints (une commande dont nous n'avons pas
trait). Il va aussi interprter le reste de la ligne comme un arguments pour la commande b, et ne pourra donc pas trouver l'objet
dont il est question (en loccurrence ici, '="BBB"'). Donc, il va lever un message d'erreur.
Comment donc affecter une nouvelle valeur b ? Le truc est de faire dbuter la commande par un point d'exclamation.
Code:
(Pdb)!b = "BBB"
Ce point d'exclamation va permettre pdb de comprendre que la commande est une instruction Python, et non une commande
pdb.
The End
Voil, c'est tout pour le moment. Il y a un grand nombre de points que je n'ai pas abords ici, comme l'aide, les alias ou les
breakpoints. Pour toutes informations les concernant, allez zieuter la rfrence pour les commandes pdb de la documentation
16/05/2015 10:32
5 sur 11
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
officielle Python. En complment, je vous recommande l'article de Jeremy Jones, Interactive Debugging in Python dans le OReillys
Python DevCenter.
En esprant que cette introduction pdb vous sera utile [pleindeblablachianttraduire]. Bonne chance !
Steve Ferg
Sekigo Le Magnifique
Marquer le code
Tout d'abord, nous nous dplaons vers un endroit intressant, o nous souhaiterions inspecter le code.
Ici, nous prendrons comme exemple une boucle qui a pour fonction d'instancier ( en python, tout est objet ) un caractre unicode,
et de le "linker" dans une nouvelle instance Tile, qui est elle-mme li dans une liste-attribut de la classe Tileset. Ce caractre
reprsente l'image provisoire avant que je cre en rel le moteur de sprite bitmap.
Pour rsumer mon besoin, je suis curieux de connatre le caractre unicode correspondant l'ID de la tuile.
Donc, je vais tagger cette ligne comme un point d'arrt pour pdb. Pour cela, il me suffit :
- soit de double-cliquer dans l'espace gauche cot de mon numro de ligne.
- soit d'appuyer sur F12.
Et hop, le code est tagger ce point prcis comme devant tre inspecter.
16/05/2015 10:32
6 sur 11
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Inspection du code
Bon, je revois rapidement les commandes lists ci-dessus. Un "r" pour dbuter, et hop, me voil instantanment dans la boucle
inspecter. En passant, je vois que la partie diteur ( gauche, l o j'cris le code quoi ) place le curseur automatiquement
l'endroit o je suis dans le code. Bien pratique dans les longs codes sources.
Donc, je souhaite inspecter la variable locale "char" qui correspond mon caractre unicode. En temps normal, j'aurais, si j'ai bien
suivi le tutoriel plus haut, insrer "p char; r" pour afficher le caractre unicode et sauter au prochain saut de boucle.
Mais nous allons utiliser une petite feature de Spyder, l'affichage dynamique des variables locales.
Dans l'encadre en haut, nous pouvons voir toutes les variables locales actuellement utiliss. Donc, la variable "char" vaut "@" et la
variable "gid" ( correspondant mon numro de saut de boucle ici ) vaut 0. Mission accompli, je connais mon caractre unicode.
Je continue tranquillement de passer mon code avec la commande "r" jusqu'au saut de boucle 98.
16/05/2015 10:32
7 sur 11
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Dsormais, la variable "char" vaut "". Mais voil, ce signe me rappelle de mauvais souvenirs, un monstre ber-puissant dans mon
roguelike favori. Je souhaiterais le modifier en "@" parce que a reprsent le hros dans ce jeu.
Deux possibilits :
- Soit je rentre la commande "char = '@'".
- Soit je double clique sur la case "char" et j'insre mon caractre @.
Et voil, j'ai modifi dynamiquement une variable de mon code en mmoire. Et ce, en quelques secondes !
videmment, c'est un comportement stupide et allant l'encontre de la logique de mon code. Mais a, je m'en fous pas mal dans
l'exemple de cet article.
Limitation de Spyder
L'affichage dynamique de spyder reprsente toutefois un petit dfaut. Il n'affiche pas les objets qu'il ne sait pas analyser ( par
exemple, nos classes personnelles ), et on ne peut donc pas modifier dynamiquement ces objets.
Par exemple, si j'ai un objet Orc avec des attributs HP et MP, je ne pourrais pas modifier ou lister graphiquement les attributs de cet
objet. Il faut passer par la ligne de commande. C'est un peu dommage dans le cas d'un objet complexe, o l'on ne se souvient pas
forcment de tout ses attributs et de toutes ses fonctions. Il faut donc fouiller dans le __dict__ de cet objet pour retrouver ce que
l'on souhaite. videmment, ce n'est pas un norme dfaut, on a quand mme le code sous les yeux en parallle et il y a l'autocompltion, et ce sera corrig dans une prochaine version.
Pour conclure, trois petits bonus pour vous persuader d'utiliser ce magnifique IDE.
16/05/2015 10:32
8 sur 11
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Dans l'encadre en haut gauche, Spyder affiche la documentation de la fonction ou de la classe en cours d'utilisation. Et cela, y
compris pour votre propre code, l'intrieur du module que vous ditez.
Par exemple, dans l'image, j'ai un peu plus haut dans le code ma classe Board. Il m'affiche les informations de signature de la
classe, ainsi que la docstring que j'ai renseign. En parallle, il m'affiche la signature uniquement dans une infobulle en-dessous de
mon curseur d'dition. Bien pratique quand une fonction prend pas mal d'arguments, ou pour viter de switcher sans arrt entre le
navigateur internet et l'diteur.
Un bmol toutefois, les bibliothques mal document dans le code ne sont pas prises en compte. Par exemple, PySFML n'affiche
rien, Pygame s'affiche car plus dans l'esprit python dans le code. Mais a reste quand mme relativement rare.
C'est un outil de profiling, assez utile quand on a besoin d'optimiser son code. Il est possible de l'utiliser sans passer par Spyder,
mais il devient bien plus intuitif avec celui-ci.
Bon, ici, le code n'est pas trs bien choisi, parce qu'il n'y a aucune opration lourde, mais a peut sauver un code qui bouchonne
quelque part sans que l'on sache o vraiment. Et puis, on peut partir dans une course au benchmarking !
16/05/2015 10:32
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Pareil que Profiler, c'est un outil stand-alone, mais bien intgr dans Spyder. Il donne une note notre code.
Attention toutefois, c'est une note concernant principalement le respect des rgles de syntaxe python ( par exemple, la clbre
PEP8 ) et la prsence d'erreurs ou non dans le code. Cela ne notera pas votre algorithme, ni votre architecture de code, ce serait
trop beau ( ou trop triste, c'est selon ).
L'utilit ? Harmoniser vos codes. En tentant d'atteindre le 10/10, vous aurez un code bien plus lisible, correctement document et
qui respecte les conventions pour la relecture ultrieur de code. Et cela permet de partir sur de bonnes bases dans les travaux en
quipe.
Et si vous tentez de l'utiliser sur un de vos modules python, ne soyez pas dprim par l'affichage d'un 3/10 ( oui, a m'est arriv la
premire fois... ) ! Cela se corrige trs facilement et vous progressez dans votre manire d'crire un code.
Oculus
C'est vraiment pas mal ces articles, faudrait les mettre en valeurs.
Sekigo Le Magnifique
Bah, je ne cherche pas vraiment ce qu'il soit en valeur. Je suis conscient que a s'adresse un auditoire relativement limit sur le
CBNA. Faut aimer python quoi, et aller au del des outils de base. a pose dj pas mal de contrainte.
Mais si jamais, a peut aider au moins une personne de passage, j'en serais dj content.
Ceci dit, je ne crache pas dans la soupe, si vous voulez rigez une statue mon honneur, pas de problme.
Sinon, j'utilise Tiled Map Editor. C'est un diteur de carte. C'est pas trop compliqu et a permet de raliser rapidement des cartes.
Bon, c'est limit, mais peu importe.
Ceci dit, y a un gros problme, le fichier de sortie. C'est du XML coupl des images. Ce n'est pas plus mal qu'une autre solution,
surtout pour un diteur qui se veut universel. Mais c'est vraiment trs ****** exploiter.
Du coup, j'ai fait un script python pour convertir ce fichier XML dans un dictionnaire Python, et incorporer les images dans ce
dictionnaire, par des chanes de caractres (du coup, tout tient dans une seule structure). Et ce dictionnaire est enregistr dans un
fichier.
Le lien google-code, le script est sous licence BSD
Y a dj des scripts pour faire la conversion Tiled=>Python, mais c'est gros et a ncessite des classes. L, tout tient dans les
structures de base de Python, et pas besoin d'importer quoi que ce soit d'autre (hormis cPickle, pour une question de logique).
Pour le moment, y a pas de support pour les layers Objets, mais a ne saurait tarder, parce que je vais en avoir besoin.
L'utilisation, c'est
python convert-tiled-to-python <file-in.tmx> <myfile>
Bien videmment, c'est un script qui continue vivre, vu que j'en ai besoin. Du coup, a sera souvent modifi, jusqu' une version
finale.
Voil, zokao.
Oculus
9 sur 11
16/05/2015 10:32
10 sur 11
onilink_
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Bah a la base c'est un langage de script, et j'ai rarement vu des langages de script aussi volus que C# & co. Leur but n'est pas la
mais sur laccessibilit et le cot pratique de la chose :p
J'en ai fait le semestre dernier pour la fac, on a appris a parcourir des dossier et traiter des fichiers x)
C'est tout con mais coupl aux regex a permet quand mme de faire des trucs vachement cool
Et ouai, python est un bon langage, puis en plus on peut l'utiliser dans Blender \o/
_________________
Oculus
C'est vrai que c'est un langage de script tellement volu que je le compare aux autres langages plus traditionnels.
Mais compar du Ruby, il est vraiment excellent :p
Sekigo Le Magnifique
Bonjour. J'ai eu quelques soucis de pc ces derniers temps (j'ai d m'en racheter un en urgence...).
Alors, concernant le polymorphisme, on peut en partie en faire. Au moins pourdriver de plusieurs classes, et pour la surcharge
d'oprateurs.
Code:
class A:
def testA():
pass
class B:
def TestB():
pass
class C(A, B):
pass
Code:
class A(object):
def __init__(self, value):
self.a = value
def __add__(self, other):
assert isinstance(other, A)
return self.a + other.a
def __repr__(self):
return "<A.a = %i>" % self.a
Y a un troisime type de polymorphisme, mais j'ai oubli ce qu'il signifiait et effectivement, je crois me souvenir que ce n'est pas
possible en Python.
Python pour dbuter, clairement. C'est le premier langage que l'on apprend dans mon universit, c'est qu'il y a une bonne raison.
Et par la suite, pour une utilisation avance, a reste toujours un bon langage. Je l'utilise quotidiennement mon boulot, j'ai
recod des systmes critiques "mtiers" et les perfs sont l.
Aprs, pour les jeux (ce dont il est question ici), je suis partag. Les performances sont excellentes, mais tre excellent ne suffit
pas pour les jeux. C'est un domaine qui a besoin de puissance brut (comme les OS, par exemple), et python peut malgr tout tre
largus dans des cas critiques.
Mais mme pour a, y a un tas de solutions :
- Utiliss avec des bibliothques crites en plus bas niveau. C'est ce que les pythonnistes font rgulirement en ralit. Python,
C'EST du C en interne. Du moins, l'implmentation de base. Il y a des implmentations dans d'autres langages (java, C#, etc...)
mais a reste exotique, et quand on parle de python, on parle 99% du temps de son implmentation en C.
- Utiliss Cython. On crit du code python, qui est traduit automatiquement en C. Il y a des trucs en plus (optionnel) utiliss en C.
Par exemple, la dclaration statique des variables, pour l'optimisation de la compilation. Une fois le type de variable dfini, il ne
bouge plus.
Voici un exemple de code Cython, que j'utilisais pour travailler sur les valeurs hsv et rgb d'une image issus d'un widget Qt :
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*"""
Created on Sat Jul 21 23:38:28 2012
@author: Sekigo
@licence : BSD -- http://www.freebsd.org/copyright/license.html
For compile this code :
16/05/2015 10:32
11 sur 11
http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...
Mais je comprendrais aisment que pour les jeux, on prfre utiliser le C, ou tout autre langages bien plus performant.
En tout cas, avoir appris Python, c'est un choix que je ne regrette absolument pas. C'est un langage trousse--outil complet, qui
est aussi bon en scripting qu'en programmation d'interface de logicel ou de dveloppement web. Et qui "oblige" avoir une bonne
pratique de la programmation et d'crire lisiblement.
Si je devais avoir une critique faire ce langage, c'est la communaut francophone quasi-inexistante sur le web. Y a bien le
forum du sdz et le forum de dveloppeur, ou encore linuxfr.org, mais a n'a rien voir avec la communaut anglophone, o par
exemple Python trust la premire place sur StackOverflow. Pourtant, y a pas mal de dveloppeurs franais qui connaissent le
python. Mais la plupart se tournent vers la communaut anglophone (moi y compris).
Et aussi un petit truc pour les futurs pythonnistes sous Windows (sous Linux, c'est dj moins utile avec le systme de paquet).
Installer et utiliser [url="https://pypi.python.org/pypi/pip"]PIP[/url]. Avec un simple
Code:
pip install pysfml
, a installera/compilera/configura automatiquement les bibliothques externes Python. Si j'ai un peu de temps cette semaine, je
ferais un petit tuto.
onilink_
Sekigo Le Magnifique
Well, c'tait une erreur de typo, j'aurais d prciser "MON universit". Autant dire que j'ai de l'avance sur le programme....
Les regex mriteraient un topic elles seules. C'est vraiment gnial comme truc, je l'utilise aussi quotidiennement mon boulot
(ce serait plus simple de dire les trucs utiliss au boulot : (python et regex) + (xml + xhtml + css) + XSLT (langage dcri sur le
net, mais que j'adore) + mysql + untasd'autrestrucs).
Par contre, n'utilisez JAMAIS de regex pour parser des structures comme du xml ou du html.... La principale raison pour laquelle
j'ai t embauch t justement pour nettoyer ces affreuses regex pour du xml qui foutent un dawa pas possible. Pour utiliser le
plus classique DOM.
Mais je suis tonn que vous ayez vu les regex avec Python. Elles sont trs bien, mais le PERL ou le PHP me semblait plus adapt
pour vous apprendre les regex.
onilink_
Je pense que c'est car on les utilisait coupl a un peu de prog systme (parcours de fichiers/dossiers, lecture, parsing, criture).
Avec python c'est quand mme trs simple a faire.
_________________
Crer un forum | phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit
16/05/2015 10:32