gratifiant > comp.lang.* > comp.lang.python

Kishikaisei (27/04/2010, 00h10)
salut a tous,
voila je voulais vous demandez comment on fait pour importer des
fonctions d un module
où ses fonctions font appel a d autres fonctions dans un autre modules
pour exemple, ca donnerai un peu comme ca

1er module:

def module1():
pass

2eme module

def module2(var):
module1()
print var

"main" module

module2(test)

j ai essayé avec des import, et des from import, mais ca marche pas

avez vous la solution a ca ?
Kishikaisei (27/04/2010, 00h40)
+s il vous plais
:-p
Michel Claveau - MVP (27/04/2010, 07h35)
Bonjour !

Dans module2,
soit:
def module2(var):
import module1
module1.module1()
print var
soit:
def module2(var):
from module1 import *
module1()
print var

@-salutations
News123 (27/04/2010, 09h05)
Michel Claveau - MVP wrote:
[..]
> module1()
> print var
> @-salutations


En general je proposerais de mettre les imports au debut de ton code et
ne pas apres la declaration de la fonction.

# 1ier module mod1.py
def mod1_func():
pass

# 2eme module mod2.py
import mod1

def mod2_func(var):
mod1.mod1_func()
print var

# main module run_main.py
import mod2

mod2.mod2_func()

ou bien:
# 2eme module mod2.py
from mod1 import mod1_func # ou from mod1 import *

def mod2_func(var):
mod1.mod1_func()
print var
Bruno Desthuilliers (27/04/2010, 09h59)
News123 a écrit :
> En general je proposerais de mettre les imports au debut de ton code et
> ne pas apres la declaration de la fonction.


+1

> ou bien:
> # 2eme module mod2.py
> from mod1 import mod1_func # ou from mod1 import *


En général, je recommanderais de ne pas utiliser "from <module> import
*" en dehors du shell Python. Par expérience, ça pose deux problèmes :
1/ lisibilité : on doit aller regarder ce qu'il y a dans <module> pour
savoir ce qui est importé
2/ risque de redéfinition intempestive d'un symbole dans le module qui
effectue l'import (déjà vécu suite à l'ajout d'un symbole dans le module
importé, et ça m'a fait perdre quelques cheveux à l'époque).

> def mod2_func(var):
> mod1.mod1_func()


Hahem... dans ce cas là, c'est:

mod1_func()
News123 (27/04/2010, 10h17)
Bruno Desthuilliers wrote:
> News123 a écrit :
> +1
> En général, je recommanderais de ne pas utiliser "from <module> import
> *" en dehors du shell Python. Par expérience, ça pose deux problèmes :
> 1/ lisibilité : on doit aller regarder ce qu'il y a dans <module> pour
> savoir ce qui est importé
> 2/ risque de redéfinition intempestive d'un symbole dans le module qui
> effectue l'import (déjà vécu suite à l'ajout d'un symbole dans le module
> importé, et ça m'a fait perdre quelques cheveux à l'époque).


Je suis d'accord. je utilise "from mod import *" tres rarement.

>> def mod2_func(var):
>> mod1.mod1_func()

> Hahem... dans ce cas là, c'est:
> mod1_func()
>> print var


Merci pour la correction.

N
Michel Claveau - MVP (27/04/2010, 21h29)
Bonsoir !

> En general je proposerais de mettre les imports au debut de ton code


D'accord, pour "en général".
Mais, d'une part, dans le cas du demandeur, ça me semblait plus
démonstratif de le mettre au plus près du besoin, et, d'autre part, j'ai
des cas d'utilisations optionnelles de certains gros modules. Dans ces
cas, l'importation dans une fonction permet d'éviter des traitements
lorsque ce n'est pas utile.

@+
Discussions similaires