OVH Cloud OVH Cloud

initialisation d'un module

4 réponses
Avatar
Olivier Ravard
Bonjour à tous,

Lorsque l'on importe un module le corps du module
constitue son initialisation.
Mais existe-t-il une fonction spécifique, éventuellement définie
dans chaque module, qui est exécutée lorsque l'on importe
ce module ? (je pensais que la foncion en question était
"initnomdumodule" ...)

Merci de vos réponses, remarques et de votre indulgence si je n'ai pas
été assez clair.

O.R.

4 réponses

Avatar
Wilk
"Olivier Ravard" writes:

Bonjour à tous,

Lorsque l'on importe un module le corps du module
constitue son initialisation.
Mais existe-t-il une fonction spécifique, éventuellement définie
dans chaque module, qui est exécutée lorsque l'on importe
ce module ? (je pensais que la foncion en question était
"initnomdumodule" ...)

Merci de vos réponses, remarques et de votre indulgence si je n'ai pas
été assez clair.


Le module va être exécuté, il suffit qu'il n'y ait aucune instruction
pour que rien ne se passe...

si monmodule.py contient

a = 5
print "toto"

lorsque tu va faire import monmodule il va afficher "toto" uniquement la
première fois.

si monmodule.py contient

a = 5
def mafonction():
print "toto"

tu peux importer monmodule, il ne va rien exécuter, juste définir a et
mafonction.



--
William - http://flibuste.net

Avatar
Olivier Ravard
"Wilk" a écrit dans le message de news:

"Olivier Ravard" writes:

Bonjour à tous,

Lorsque l'on importe un module le corps du module
constitue son initialisation.
Mais existe-t-il une fonction spécifique, éventuellement définie
dans chaque module, qui est exécutée lorsque l'on importe
ce module ? (je pensais que la foncion en question était
"initnomdumodule" ...)

Merci de vos réponses, remarques et de votre indulgence si je n'ai pas
été assez clair.


Le module va être exécuté, il suffit qu'il n'y ait aucune instruction
pour que rien ne se passe...

si monmodule.py contient

a = 5
print "toto"

lorsque tu va faire import monmodule il va afficher "toto" uniquement la
première fois.

si monmodule.py contient

a = 5
def mafonction():
print "toto"

tu peux importer monmodule, il ne va rien exécuter, juste définir a et
mafonction.



Merci de ta réponse. En fait, j'avais bien compris tout ça. C'est ce que
signifiait
ma phrase : "Lorsque l'on importe un module le corps du module constitue son
initialisation"
En réalité mon problème est que mon module est écrit en C++ et je veux
qu'une fonction
s'exécute automatiquement lorsque l'on importe le module.



--
William - http://flibuste.net



Avatar
F. Petitjean

"Wilk" a écrit dans le message de news:

"Olivier Ravard" writes:

Bonjour à tous,

Lorsque l'on importe un module le corps du module
constitue son initialisation.
Mais existe-t-il une fonction spécifique, éventuellement définie
dans chaque module, qui est exécutée lorsque l'on importe
ce module ? (je pensais que la foncion en question était
"initnomdumodule" ...)



Le module va être exécuté, il suffit qu'il n'y ait aucune instruction
pour que rien ne se passe...

si monmodule.py contient

a = 5
print "toto"

lorsque tu va faire import monmodule il va afficher "toto" uniquement la
première fois.

si monmodule.py contient

a = 5
def mafonction():
print "toto"

tu peux importer monmodule, il ne va rien exécuter, juste définir a et
mafonction.



Merci de ta réponse. En fait, j'avais bien compris tout ça. C'est ce que
signifiait
ma phrase : "Lorsque l'on importe un module le corps du module constitue son
initialisation"
En réalité mon problème est que mon module est écrit en C++ et je veux
qu'une fonction
s'exécute automatiquement lorsque l'on importe le module.
Il me semble qu'il suffit de mettre l'appel de cette fonction au niveau

"module scope" c'est-à-dire bien cadré à gauche :
result = initmodule(params)
Attention ce ne sera, en principe, exécuté qu'au premier import.

Pour voir un exemple d'effet de bords lire this.py et exécuter

import this


--
William - http://flibuste.net







Avatar
Eric Brunel
Olivier Ravard wrote:
[snip]
Merci de ta réponse. En fait, j'avais bien compris tout ça. C'est ce que
signifiait
ma phrase : "Lorsque l'on importe un module le corps du module constitue son
initialisation"
En réalité mon problème est que mon module est écrit en C++ et je veux
qu'une fonction
s'exécute automatiquement lorsque l'on importe le module.


C'est bien la fonction init<nom du module> qui est censée s'exécuter, mais vu le
"name-mangling" C++, il est possible que l'interpréteur Python ne la trouve pas.
Essaie de définir cette fonction en extern "C" {...}; ça devrait mieux marcher...

HTH
--
- Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com