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

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

2 réponses
Avatar
Olivier
Bonjour =E0 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 =3D None, arg2 =3D None):
print "result_1 =3D "+sub_function_1(arg1 =3D arg1)
print "result_2 =3D "+sub_function_2(arg1 =3D arg2)

def sub_function_1(arg1 =3D None):
return str(arg1)


def sub_function_2(arg1 =3D None):
return str(arg1)

if __name__ =3D=3D "__main__":
main_function(arg1 =3D 5, arg2 =3D "a")

[/code]

Dans ce code j'ai une premi=E8re fonction, dite principale, qui va appeler =
deux sous fonctions. Dans la r=E9alit=E9 de mon code je fais appel =E0 4 ou=
5 sous-fonctions et la fonction principale est charg=E9 d'appeler les bonn=
es sous fonctions =E0 l'analyse des arguments qu'elle re=E7oit.
Je me demandais si =E7a posait probl=E8me que les arguments de mes sous-fon=
ctions aient le m=EAme nom que les fonctions de niveaux sup=E9rieurs et en =
particulier =E0 l'appel des fonction (arg1 =3D arg1). N'y a-t-il pas risque=
de confusion pour l'interpr=E9teur...?
L'id=E9e c'est que si cela ne pose vraiment aucun probl=E8me, je peux alors=
donner le m=EAme nom a tous les arguments qui repr=E9sentent la m=EAme cho=
se quel que soit le niveau de hi=E9rarchie et =E7a me simplifie vraiment la=
vie...

Merci d'avance pour vos r=E9ponse.

Olivier

2 réponses

Avatar
News123
On 06/29/2011 11:02 AM, Olivier wrote:
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 bonnes sous fonctions à l'analyse des arguments qu'elle reçoit.
Je me demandais si ça posait problème que les arguments de mes sous-fonctions 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 chose 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.
Avatar
Laurent Claessens
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 bonnes sous fonctions à l'analyse des arguments qu'elle reçoit.
Je me demandais si ça posait problème que les arguments de mes sous-fonctions 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 chose quel que soit le niveau de hiérarchie et ça me simplifie vraiment la vie...

Merci d'avance pour vos réponse.

Olivier






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