Il parait qu'un certain module, nommé «__builtin__», serait
automatiquement préchargé au début de n'importe quel script python. Il
permet apparemment de prédéfinir plein d'objets, comme par exemple les
objets True, False, None et plein d'autres choses.
J'ai voulu voir ce qu'il y avait dedans par curiosité uniquement, mais
impossible de le trouver sur mon ordinateur. Où est-il ? Existe-t-il ou
est-ce je ne sais quelle abstraction ?
Je suis sur Ubuntu 7.10 et j'ai Python version 2.5.1
Merci d'avance.
--
François
__builtin__ est à l'intérieur de Python. Dans le noyau, comme une
amande.
Pour voir ce qu'il y a dedans :
import __builtin__
print dir(__builtin__)
ou, pour avoir un peu plus de détails :
import __builtin__
for i in dir(__builtin__):
print i,'\r\n',help(i)
@+
Michel Claveau
Ok, merci pour la réponse.
Donc si je comprends bien, il n'existe même pas de fichier source
__builtin__.py ? C'est bien cela ? Par exemple exemple avec
l'implémentation CPython il est directement codé en C ?
C'est un peu curieux alors d'appeler ça un module si c'est intégré dans
le noyau Python et que c'est préchargé automatiquement à chaque script,
non ? En quoi est-ce un module alors ? Moi j'aurais tendance à dire que
ça fait directement partie du langage, non ?
--
François
> Ok, merci pour la réponse.
>
> Donc si je comprends bien, il n'existe même pas de fichier source
> __builtin__.py ? C'est bien cela ?
Yeps.
> Par exemple exemple avec
> l'implémentation CPython il est directement codé en C ?
Yeps.
> C'est un peu curieux alors d'appeler ça un module si c'est intégré dans
> le noyau Python et que c'est préchargé automatiquement à chaque script,
> non ? En quoi est-ce un module alors ?
En ce que ça ne fait pas partie du langage à proprement parler, et en
ce que tu peux l'importer, ce qui te donne un objet module.
> Moi j'aurais tendance à dire que
> ça fait directement partie du langage, non ?
Non, dans le sens où 1/ ce n'est pas défini par la grammaire du
langage, et 2/ un interpréteur Python peut charger une version
modifiée ou restreinte de ce module.
bruno.des...@gmail.com a écrit :
>> C'est un peu curieux alors d'appeler ça un module si c'est intégré dans
>> le noyau Python et que c'est préchargé automatiquement à chaque script,
>> non ? En quoi est-ce un module alors ?
>
> En ce que ça ne fait pas partie du langage à proprement parler, et en
> ce que tu peux l'importer, ce qui te donne un objet module.
Pardon de pinailler, mais si je regarde par exemple dans le «Python
Reference Manual» de Guido van Rossum dont le but est de décrire le
langage, il est question du type None. Ça me laisse penser que l'objet
None par exemple fait bien partie du langage Python. Pourtant, il est
clairement défini par le «module» __builtin__. Donc dire que __builtin__
ne fait pas partie du langage me gêne un peu car cela voudrait dire que
None par exemple ne ferait pas partie du langage. Non ?
>> Moi j'aurais tendance à dire que
>> ça fait directement partie du langage, non ?
>
> Non, dans le sens où 1/ ce n'est pas défini par la grammaire du
> langage,
Mais dans les types de bases du langage il y a le type None qui est
défini par __builtin__ comme je l'ai dit juste au dessus, non ?
> et 2/ un interpréteur Python peut charger une version
> modifiée ou restreinte de ce module.
Est-il possible de charger l'interpréteur sans que __builtin__ soit chargé ?
--
François
Bonjour,
> Pardon de pinailler, mais si je regarde par exemple dans le «Python
> Reference Manual» de Guido van Rossum dont le but est de décrire le
> langage, il est question du type None. Ça me laisse penser que l'objet
> None par exemple fait bien partie du langage Python. Pourtant, il est
> clairement défini par le «module» __builtin__. Donc dire que __builtin__
> ne fait pas partie du langage me gêne un peu car cela voudrait dire que
> None par exemple ne ferait pas partie du langage. Non ?
Grâce à l'interpréteur Python, je constate une petite complication (que
je suis incapable d'expliquer, quoique l'explication doit être là: http://
docs.python.org/lib/module-builtin.html):
La petite complication:
> dir(__builtin__)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '__builtin__' is not defined
/> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'Snip .....']
/> dir(__builtin__)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '__builtin__' is not defined
/> import __builtin__
/> dir(__builtin__)
['ArithmeticError', 'AssertionError', 'Snip .....']
En clair, None n'est pas "défini que par le module __builtin__"
--
Yves
Effectivement, il serait difficile de se passer de None... Pas
toujours évident de tracer une belle limite bien propre.
> >> Moi j'aurais tendance à dire que
> >> ça fait directement partie du langage, non ?
>
> > Non, dans le sens où 1/ ce n'est pas défini par la grammaire du
> > langage,
>
> Mais dans les types de bases du langage il y a le type None qui est
> défini par __builtin__ comme je l'ai dit juste au dessus, non ?
Oui. Là dessus, tu a raison et j'ai tort.
> > et 2/ un interpréteur Python peut charger une version
> > modifiée ou restreinte de ce module.
>
> Est-il possible de charger l'interpréteur sans que __builtin__ soit chargé ?
Je me posais justement la question en te répondant. Je me demandais
aussi ce qu'il en était avec Jython et IronPython.
Bon, pour le professorat, il me reste encore du boulot !-)
> En clair, None n'est pas "défini que par le module __builtin__"
Autrement dit, quand on fait dir(__builtins__) (noter le "s"), sans
importer quoi que ce soit, on constate que None est là.
Note pour moi-même: recopier 100 fois: "Explicit is better than implicit."
--
Yves
Oui, c'est exactement ça. C'est une question de point de vue. Comme je
suppose qu'en général __builtin__ doit être codé en autre chose que du
Python (en C par exemple), j'aurais tendance à dire qu'il fait des
briques primitives du langage. Mais au final, on s'en fiche un peu.
>> Est-il possible de charger l'interpréteur sans que __builtin__ soit chargé ?
>
> Je me posais justement la question en te répondant. Je me demandais
> aussi ce qu'il en était avec Jython et IronPython.
>
> Bon, pour le professorat, il me reste encore du boulot !-)
:-))
--
François
Il faut lire «... fait *partie* des briques ...» bien sûr.
Pardon, il faut que je me relise.
--
François
Non non, la question est légitime je trouve. Il y a en effet une
subtilité entre le module __builtin__ et l'attribut __builtins__ (avec
un "s") qui m'échappe complètement et que j'aimerais bien comprendre.
Effectivement, quand on charge l'interpréteur tel quel (sans rien
importer), on a accès à tout ce que définit __builtin__, comme None ou
max() par exemple. Mais en revanche, l'interpréteur ne connaît pas
__builtin__ mais connaît __builtins__ (avec un "s"). Exemple :
################################################
>>> __builtin__.max(1,2) # Donne une erreur !!!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '__builtin__' is not defined
>>> __builtins__.max(1,2) # Marche très bien !!!
2
################################################
Je ne comprends pas ce qu'est ce __builtins__ (avec un "s") exactement ?
--
François
import __builtin__
dir(__builtin__)
__builtin__ is __builtins__
Là, on entre dans les recoins un peu ??? de l'implémentation.
C'est dans le FameuxManuel(tm):
http://docs.python.org/lib/module-builtin.html
HTH
C'est curieux. Dans le __main__,
#----------------------------------------
import __builtin__
__builtin__ == __builtins__ # donne True
mais dans un module
import __builtin__
__builtin__ == __builtins__ # donne False
#----------------------------------------
J'ai l'impression que dans le __main__ on a :
__builtin__ == __builtins__
Alors que dans un module autre que le __main__, on a :
__builtin__.__dict__ == __builtins__
Il y a là une subtilité qui m'échappe complètement.
--
François
Il me semble que c'est évoqué dans le lien ci-avant...
> Il y a là une subtilité qui m'échappe complètement.
>
Heu... Comment dire... Ce n'est pas que la question soit totalement
dépourvue d'intérêt, et ta curiosité est légitime, mais par ailleurs, on
est là quelque peu dans les détails d'implémentation, et je n'ai
moi-même jamais eu à me soucier de ces détails depuis que j'utilise
Python (sachant que mes premiers contacts avec la bête remonte quand
même à quelque part entre fin 1999 et fin 2000).
Maintenant, si ton niveau en anglais est à peu près correct, tu peux
toujours aller poser la question sur c.l.py où rodent quelques membre du
dev-team. Ils seront certainement les plus à même de t'éclairer sur ces
points. Moi à ce stade, je déclare forfait !-)
Moi aussi, je vais déclarer forfait à ce stade. Merci encore pour ton
aide. :-)
En parlant de niveau d'anglais, je voulais savoir s'il existait une
traduction française du "Python Reference Manual" de Guido van Rossum.
La dernière version datant du 21 février 2008, mais même s'il existe une
traduction plus ancienne, j'en serais pleinement satisfait.
J'ai du voir quelque part une traduction du "Python Tutorial" de Guido
van Rossum, mais pas du "Python Reference Manual". Je me demandais si ça
existait...
Merci encore.
--
François
Sur ce coup, y a vraiment pas de quoi.
> En parlant de niveau d'anglais, je voulais savoir s'il existait une
> traduction française du "Python Reference Manual" de Guido van Rossum.
> La dernière version datant du 21 février 2008, mais même s'il existe une
> traduction plus ancienne, j'en serais pleinement satisfait.
>
> J'ai du voir quelque part une traduction du "Python Tutorial" de Guido
> van Rossum, mais pas du "Python Reference Manual". Je me demandais si ça
> existait...
Y avait eu un effort dans ce sens il y a quelques temps (une paire
d'années SJMSB), mais je ne sais pas où ça en est. De toutes façons,
trad ou pats trad, l'informatique, si tu lis pas l'anglais technique,
t'es dans la m...
Oui tu as tout à fait raison, et je m'en veux tellement d'avoir négligé
l'anglais dans ma scolarité...
--
François
Pôvreu kon...
--
Pierre Maurette
Je ne comprends pas cette insulte ?
--
François
Dont acte...
--
Pierre Maurette
Franchement, je vois pas trop à quoi vous jouez exactement et je ne vais
pas chercher à le savoir. Je suis simplement navré qu'on puisse manquer
de courtoisie à ce point.
--
François
Votre fausse candeur me casse les couilles. En C comme en Python...
Un langage est un outil, pas un truc pour se branler.
--
Pierre Maurette
@+
Michel Claveau
Ou les limbes du Pacifique.
On n'a quand même pas mérité ça, non ?
--
Pierre Maurette
Heu... Pierre, tu pêtes un cable ?
Bah. C'est pas grave, c'est oublié. Allez, comme je suis bonne pâte, je
laisse même une petite chanson en cadeau. :-)
--
François
C'est expliqué dans le livre "Python en concentré" disponible ici :
http://www.amazon.fr/Python-en-concentr%C3%A9-Alex-Martelli/dp/284177452X/ref=sr_1_9?ie=UTF8&s=books&qid=1209021625&sr=8-9
Ca se passe dans le chapitre traitant de import & co.
J'ai pas le livre avec moi alors je peux pas maintenant, mais je pourrais toujours relire et faire une synthèse si ça t'intéresse.
Nicolas
Merci pour la réponse. :-)
Oui ça m'intéresserait bien si cette corvée ne te pèse pas trop. Il n'y
a vraiment pas d'obligation et encore moins d'urgence.
Au passage, le livre dont tu parles est-il de bonne qualité ? J'ai
hésité à l'acheter il y a quelques jours.
--
François
C'est par là (trop long à recopier à la main et Google l'a déjà fait) :
http://books.google.fr/books?id=_3MCi1uRmvAC&pg=PA119&lpg=PA119&dq=%22python+offre+plusieurs+objets+pr%C3%A9d%C3%A9finis%22&source=web&ots=ksBkWkDyDv&sig=05J6HIjq0eHcJQp05QArySF9tOo&hl=fr#PPA119,M1
>
> Au passage, le livre dont tu parles est-il de bonne qualité ? J'ai
> hésité à l'acheter il y a quelques jours.
>
Perso, j'en ai qu'un et c'est celui là. Même s'il date un peu (il ne couvre pas les dernières versions de Python),
je le trouve très bien pour apprendre le langage et découvrir une bonne partie de la bibliothèque standard.
Attention, c'est un manuel de référence. De courts extraits de codes sont donnés mais ne cherche pas d'exemples
tout cuits d'applications.
Nicolas
Parfait ! Merci beaucoup. :-)
--
François