fonction et sous fonctions dontles arguments ont le même nom
Le
Olivier

Bonjour à tous,
je me pose une question concernant les fonctions et ce que j'appellerai ici=
des sous fonctions.
Ci-dessous le code d'illustration de ma commande :
[code]
#!/usr/bin/env python
def main_function(arg1 = None, arg2 = None):
print "result_1 = "+sub_function_1(arg1 = arg1)
print "result_2 = "+sub_function_2(arg1 = arg2)
def sub_function_1(arg1 = None):
return str(arg1)
def sub_function_2(arg1 = None):
return str(arg1)
if __name__ == "__main__":
main_function(arg1 = 5, arg2 = "a")
[/code]
Dans ce code j'ai une première fonction, dite principale, qui va appeler =
deux sous fonctions. Dans la réalité de mon code je fais appel à 4 ou=
5 sous-fonctions et la fonction principale est chargé d'appeler les bonn=
es sous fonctions à l'analyse des arguments qu'elle reçoit.
Je me demandais si ça posait problème que les arguments de mes sous-fon=
ctions aient le même nom que les fonctions de niveaux supérieurs et en =
particulier à l'appel des fonction (arg1 = arg1). N'y a-t-il pas risque=
de confusion pour l'interpréteur?
L'idée c'est que si cela ne pose vraiment aucun problème, je peux alors=
donner le même nom a tous les arguments qui représentent la même cho=
se quel que soit le niveau de hiérarchie et ça me simplifie vraiment la=
vie
Merci d'avance pour vos réponse.
Olivier
je me pose une question concernant les fonctions et ce que j'appellerai ici=
des sous fonctions.
Ci-dessous le code d'illustration de ma commande :
[code]
#!/usr/bin/env python
def main_function(arg1 = None, arg2 = None):
print "result_1 = "+sub_function_1(arg1 = arg1)
print "result_2 = "+sub_function_2(arg1 = arg2)
def sub_function_1(arg1 = None):
return str(arg1)
def sub_function_2(arg1 = None):
return str(arg1)
if __name__ == "__main__":
main_function(arg1 = 5, arg2 = "a")
[/code]
Dans ce code j'ai une première fonction, dite principale, qui va appeler =
deux sous fonctions. Dans la réalité de mon code je fais appel à 4 ou=
5 sous-fonctions et la fonction principale est chargé d'appeler les bonn=
es sous fonctions à l'analyse des arguments qu'elle reçoit.
Je me demandais si ça posait problème que les arguments de mes sous-fon=
ctions aient le même nom que les fonctions de niveaux supérieurs et en =
particulier à l'appel des fonction (arg1 = arg1). N'y a-t-il pas risque=
de confusion pour l'interpréteur?
L'idée c'est que si cela ne pose vraiment aucun problème, je peux alors=
donner le même nom a tous les arguments qui représentent la même cho=
se quel que soit le niveau de hiérarchie et ça me simplifie vraiment la=
vie
Merci d'avance pour vos réponse.
Olivier
pas d'risque. C'est prevu comme ca.
Les fonctions ont leur propre "espace de nom". L'exemple suivant produit
une erreur :
#! /usr/bin/python
# -*- coding: utf8 -*-
def foo():
a=1
def bar():
print a
foo()
bar()
Traceback (most recent call last):
File "./ess.py", line 13, in <module>
bar()
File "./ess.py", line 9, in bar
print a
NameError: global name 'a' is not defined
En effet, la variable "a" est uniquement définie dans foo. La fonction
bar n'a aucune conscience des noms de choses qui existent dans foo.
Pour autant que je le sache, il est même impossible de modifier le code
de bar pour retrouver la valeur de 'a' dans foo.
Bref, pas de problèmes, tu peux foncer; c'est même conseillé :
import this
(cf la dernière ligne)
Laurent