Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Le module __builtin__ : où est-il ?

29 réponses
Avatar
Francois
Bonjour à tous,

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

10 réponses

1 2 3
Avatar
Méta-MCI \(MVP\)
Bonjour !

__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,'rn',help(i)




@+

Michel Claveau
Avatar
Francois
Bonjour !

__builtin__ est à l'intérieur de Python. Dans le noyau, comme une amande.

Pour voir ce qu'il y a dedans : [couic]



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

Avatar
bruno.desthuilliers
On 20 avr, 13:28, Francois wrote:

Bonjour !

__builtin__ est à l'intérieur de Python. Dans le noyau, comme une a mande.

Pour voir ce qu'il y a dedans : [couic]


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é d ans
le noyau Python et que c'est préchargé automatiquement à chaque scri pt,
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.


Avatar
Francois
Merci pour la réponse, j'ai quelques remarques.

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


Avatar
yves
Le Sun, 20 Apr 2008 17:43:59 +0200, Francois a écrit:

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

Avatar
bruno.desthuilliers
On 20 avr, 17:43, Francois wrote:
Merci pour la réponse, j'ai quelques remarques.


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 s cript,
non ? En quoi est-ce un module alors ?


En ce que ça ne fait pas partie du langage à proprement parler, et e n
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 __built in__
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 ?


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 char gé ?


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 !-)



Avatar
yves
Le Sun, 20 Apr 2008 16:21:58 +0000, yves a écrit:

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

Avatar
Francois
Effectivement, il serait difficile de se passer de None... Pas
toujours évident de tracer une belle limite bien propre.


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


Avatar
Francois
j'aurais tendance à dire qu'il fait des
briques primitives du langage. Mais au final, on s'en fiche un peu.


Il faut lire «... fait *partie* des briques ...» bien sûr.
Pardon, il faut que je me relise.

--
François

Avatar
bruno.desthuilliers
On 20 avr, 18:40, yves wrote:
Le Sun, 20 Apr 2008 16:21:58 +0000, yves a écrit:

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 ."


import __builtin__
dir(__builtin__)
__builtin__ is __builtins__

Là, on entre dans les recoins un peu ??? de l'implémentation.


1 2 3