Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

import selectif

0 views
Skip to first unread message

Jogo

unread,
Nov 11, 2009, 8:58:49 AM11/11/09
to
Bonjour,

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

Bruno Desthuilliers

unread,
Nov 11, 2009, 12:50:22 PM11/11/09
to
Jogo a ᅵcrit :

> Bonjour,
>
> J'aimerais importer tous les attributs dont le nom commence par 'K_'.
> Un genre de 'from pygame import K_*'. Est-ce possible ? Comment ?

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.

Amaury Forgeot d'Arc

unread,
Nov 12, 2009, 4:20:15 PM11/12/09
to
Bruno Desthuilliers a ᅵcrit :

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

Bruno Desthuilliers

unread,
Nov 12, 2009, 3:48:52 PM11/12/09
to
Amaury Forgeot d'Arc a ᅵcrit :

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 :(


Michel Claveau - MVP

unread,
Nov 12, 2009, 6:23:49 PM11/12/09
to
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 :


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

Amaury Forgeot d'Arc

unread,
Nov 13, 2009, 4:18:07 PM11/13/09
to
Bonsoir,

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.

Michel Claveau - MVP

unread,
Nov 13, 2009, 6:10:32 PM11/13/09
to
Bonsoir !

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

Jogo

unread,
Nov 15, 2009, 8:38:43 AM11/15/09
to
> import pygame
> for name in dir(pygame):
> if name.startswith("K_"):
> globals()[name] = getattr(pygame, name)

ᅵ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 -

0 new messages