J'aimerais importer tous les attributs dont le nom commence par 'K_'.
Un genre de 'from pygame import K_*'. Est-ce possible ? Comment ?
--
Le seul problᅵme quand on garde l'esprit ouvert, c'est qu'on trouve
toujours quelqu'un qui tient absolument ᅵ y fourrer tout un tas de
choses.
-- T. Pratchett
import pygame
for name in dir(pygame):
if name startswith("K_"):
exec "%s=pygame.%s" % (name, name)
NB : pas testᅵ et franchement crado. Mᅵme si s'avᅵrait produire le
rᅵsultat escomptᅵ, je dᅵconseille.
Dans le mᅵme esprit, un peu moins crado ᅵ mon avis car on n'utilise pas
"exec" :
import pygame
for name in dir(pygame):
if name.startswith("K_"):
globals()[name] = getattr(pygame, name)
(et j'ai testᅵ...)
--
Amaury
Yeps - encore une confirmation du fait que les cas d'utilisation rᅵels
de exec (j'entend: les cas oᅵ il n'y a pas une solution plus explicite)
sont vraiment rares !-)
Mais franchement, le problᅵme fondamental reste le mᅵme AMHA - le mᅵme
que celui posᅵ par "from module import *" - ᅵ savoir qu'aprᅵs ᅵa, on ne
sait pas _exactement_ ce qu'on a dans l'espace de nommage courant - ni,
pour peu qu'on rᅵpᅵte le gag avec un autre module, d'oᅵ vient quel nom.
Il m'est arrivᅵ il y a quelques annᅵe, me croyant trᅵs intelligent, de
faire comme ᅵa des imports "automatiques" pour m'ᅵviter quelques lignes
de code sans grand intᅵrᅵt. J'ai ᅵtᅵ trᅵs fier de moi jusqu'ᅵ ce que je
doive dᅵbugger le machin quelques mois plus tard :(
Dérivé de la méthode BD, mais avec une fonction, pour ne pas encombrer (libérer de) la mémoire, avec les éléments non sélectionnés :
def impselect(nom,debut):
import imp
fp, pathname, description = imp.find_module(nom)
modul=imp.load_module(nom, fp, pathname, description)
fp.close()
result='from '+nom+' import '
for name in dir(modul):
if name.startswith(debut):
result += name+','
return(result[:-1])
exec(impselect('pygame','K_'))
@+
--
Michel Claveau
Michel Claveau - MVP a écrit :
> Bonsoir !
>
> Dérivé de la méthode BD, mais avec une fonction, pour ne pas encombrer (libérer de) la mémoire, avec les éléments non sélectionnés :
Quelle mémoire penses-tu libérer ainsi ?
Le module pygame est créé de toutes façons, avec tous ses attributs.
Si je regarde le contenu de sys.modules, après le fin de la fonction, je n'y vois pas (plus) pygame et ses dépendances.
@+
--
MCI
ᅵa me semble vraiment pas mal comme solution.
Pour ce qui est de la pollutions de l'espace de nommage, ᅵa me semble
assez correct dans mon cas. Il me semble en effet que la notation 'K_*'
soit rᅵservᅵe dans pygame aux constantes d'identification des touches.
Il en est de mᅵme dans mon paquetage masquant pygame.
--
[...] en prenant l'argent des pauvres et en le donnant aux riches, nous
stimulons l'effort et, partant, l'ᅵconomie
- John Kenneth Galbraith -