OVH Cloud OVH Cloud

équivalence __builtin__

8 réponses
Avatar
Do Re Mi chel La Si Do
Bonjour !


Ces trois déclinaisons :

print 'aabbcc'.upper()


import __builtin__
print __builtin__.str.upper('aabbcc')


f=__builtin__.str.upper
print f('aabbcc')


me semblent équivalentes.
Mais, comment vérifier cette équivalence ?

Ainsi, il est impossible de faire :
ff=upper

Du coup, je cherche la voie...


Bon vendredi !

MCI


PS : accessoirement, je cherche un moyen simple d'obtenir la liste des
classes contenues dans __builtin__

8 réponses

Avatar
Do Re Mi chel La Si Do
Re !


Petit précision, pour le PS : la plupart des classes de __builtin__ sont
identifiées comme type 'type'

MCI
Avatar
Do Re Mi chel La Si Do
Re re !

Pour l'instant, je fais ça :

import __builtin__,types
for i in dir(__builtin__):
exec('if type(__builtin__.'+i+') in
(types.TypeType,types.ClassType): print i')

Mais ça ne me semble pas très joli.

@-salutations

Michel Claveau
Avatar
Do Re Mi chel La Si Do
Il faut supprimer ce p..... de retour-chariot, dû au plain/text.
Ah, vivement que tout le monde puisse lire les messages en HTML !

MCI
Avatar
Christophe
Il faut supprimer ce p..... de retour-chariot, dû au plain/text.
Ah, vivement que tout le monde puisse lire les messages en HTML !


C'est ton client mail qui a mis ce retour à la ligne. Rien ne l'impose
dans les messages en texte. Pour preuve parfois des gens postent des
messages sans retour à la ligne et sur certains clients newsgroup c'est
horrible à lire :)

PS : mort aux mails en HTML :p

Avatar
William Dode
On 16-12-2005, Christophe wrote:
Il faut supprimer ce p..... de retour-chariot, dû au plain/text.
Ah, vivement que tout le monde puisse lire les messages en HTML !


C'est ton client mail qui a mis ce retour à la ligne. Rien ne l'impose
dans les messages en texte. Pour preuve parfois des gens postent des
messages sans retour à la ligne et sur certains clients newsgroup c'est
horrible à lire :)

PS : mort aux mails en HTML :p


pourquoi pas en flash tant qu'on y est

mort aux 4x4 en ville
vive le vélo et docutils
:-D

--
William Dodé - http://flibuste.net


Avatar
Michel Claveau
'jour !

Tu as raison, le retour-chariot n'était pas dans mon message. Et selon
le lecteur de news, il apparaît, ou non.

Mais, cette réponse, c'est pour éviter de vraiment répondre à ma
question, n'est-ce pas ?

--
@-salutations

Michel Claveau
Avatar
Michel Claveau
Salut !

Les messages avec du flash embarqué (vraiment intégré, en payload, et
non avec une pièce jointe), ça existe.
Les techniques sont maintenant assez connues. Le principal problème
étant de trouver un "véhicule" pour transporter le fichier.
Généralement, on utilise WMP. Mais il nécessite un patch du registre
(appelé "rustine de Bill Scott").

Et, cela permet de faire de jolies choses, avec une taille réduite.

Toutefois, je doute que cela convienne à un quelqu'un qui a fait voeu
de chasteté, heu... de texte brut.

:oÞ


--
@-salutations

Michel Claveau
Avatar
Hervé Cauwelier
Bonjour !


Ces trois déclinaisons :

print 'aabbcc'.upper()


import __builtin__
print __builtin__.str.upper('aabbcc')


f=__builtin__.str.upper
print f('aabbcc')


me semblent équivalentes.


Le premier montre une méthode d'instance. Le second laisse pense que
c'est une méthode de classe, mais le suivant montre que c'est une
méthode statique.

Mais dans les trois cas, tu fais appel à la même méthode. f n'est qu'un
pointeur de fonction (pour les old-school du C), possible car justement
upper est une methode statique, une bête fonction pas dans un module
mais dans une classe.

Mais, comment vérifier cette équivalence ?


Une piste :

id(str.upper)
-1210360372



id(''.upper)
-1212982836





Elle ne sont pas à la même adresse mémoire, ce qui ne permet pas de
conclure que ce sont des entités différentes, mais...

id('1')
-1210192544



id(str(1))
-1210192544




Il s'agit ici toujours de la constante litéralle '1', mais leur
traitement peut être différent des objets et fonctions/méthodes.

Ainsi, il est impossible de faire :
ff=upper


Heu oui, y'a un léger manque de référence à une entité « upper » là...

Du coup, je cherche la voie...


C'est justement ce qui me manque, où veux-tu en venir.

PS : accessoirement, je cherche un moyen simple d'obtenir la liste des
classes contenues dans __builtin__


for name in dir(__builtins__):
attr = getattr(__builtins__, name)
if type(attr) is types.ClassType:
print name, "classe"

Pas vérifié mais il pourrait ne pas être fiable sur l'ancien modèle de
classes.

--
Hervé Cauwelier
http://www.oursours.net/