Bonjour !
Face au constat déprimant que le pascal est à peu près mort aujourd'hui, je me suis mis au python via le livre de Gérard Swinnen. Globalement, c'est assez sympathique comme langage si l'on oublie quelques petites contraintes énervantes comme on en trouve dans tous les langages (le fait de devoir mettre self partout... ça fait du code tellement lourd à lire...).
Mais il y a une limitation du langage qui est vraiment énorme, ce qui me laisse penser qu'elle n'en est pas une et que c'est moi qui n'ai rien compris, c'est l'impossibilité de créer une instance de classe ou une liste dans une fonction.
Je m'explique par un exemple concret (note : oui, je sais, y'a des fautes de codage par floppée dans le code qui suis, je l'ai un peu corrigé après heureusement ^^).
Ce code est censé remplir la liste "obstacles" avec des éléments piochés dans un fichier. Dans la pratique, il le fait très bien, mais seulement à l'intérieur de la fonction, car bien évidemment, l'infâme python, quand on quitte la fonction, décrète que son espace de noms est inutile et bon à jeter.
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 def charger_obstacles(obstacles, nom_fichier): "Charge une liste d'obstacles (qui doit être précédemment initialisée)" resultat = "" try: f = open(nom_fichier, "r") #Vérification du type de fichier et de la version des obstacles utilisée s = f.readline() if s!="***Données d'Obst@cleS***": f.close() return "erreur:type" s = f.readline() if s!="Version : "+version_obst: resultat = "danger:version" #Lecture du nombre d'obstacles dans le fichier nb = int(f.readline()[9:]) #Chargement proprement dit... obstacles = [] for i in range(nb): obstacles.append(Obstacle()) obstacles[i].charger(fichier) #...et comme on est poli on oublie pas de fermer la porte en sortant. f.close() except: resultat = "erreur:fichier" return resultat
En pascal le problème ne se serait pas posé, un petit var et on n'en parle plus...
En C++ on aurait mis un & devant et cf pascal...
Mais en python, y-a-t'il un moyen propre (non, pitié, pas la variable globale !) pour que ma liste survive à ça ?![]()
Partager