Comment puis-je accéder par programme aux valeurs d'argument par défaut d'une méthode dans Python? Par exemple, dans ce qui suit
def test(arg1='Foo'):
pass
4 Réponses :
Ricardo Cárenes est sur la bonne voie. En réalité, passez à la fonction Comme il s'avère, vous pouvez vous reporter à test code> intérieur em> test code> va être beaucoup plus difficile. Le module code> code> vous obtiendra plus loin, mais il va être laid: code Python pour obtenir la fonction actuelle dans une variable? Test code> à l'intérieur de la fonction: p > >>> test()
foo
>>> other = test
>>> other()
foo
>>> del test
>>> other()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in test
NameError: global name 'test' is not defined
J'étais aussi sous cette impression, éteignit aussi que test code> est dans Scope local code> comme indiqué dans le commentaire de Ricardo sur ma réponse.
Si nous faisons def test2 (): Imprimer les sections locales (), '\ n \ n', globals () code>, nous voyons que test2 code> est dans les globaux et il n'y a rien Aux locaux.
Ce n'est pas très élégant (du tout), mais cela fait ce que vous voulez: fonctionne avec python 3.x aussi. p> p>
Pourquoi Globals () Code>? Test CODE> est local dans sa propre portée, pas besoin de cela.
@ Ricardocárenes, tu as raison. Je ne savais pas ça, merci. La fixant maintenant.
Ils sont stockés dans Comme @friedrich me rappelle, Python 3 a des arguments "uniquement mot-clé", et pour ceux que les valeurs par défaut sont stockées dans la fonction test.func_default code> (python 2) et dans test .__ par défaut __ code> (python 3). P>
.__ kwdefault __ code> p> p> p> P>
Voir aussi __ kwdefault __ code> .
considérer: .func_default code> vous donne les valeurs par défaut, en tant que séquence, afin que les arguments apparaissent dans votre code. P> < P> Apparemment, func_default code> a été supprimé dans Python 3. P> p>
Je pense que func_default code> ne fonctionne que sur Python 2.x. __ par défaut __ code> semble fonctionner sur Python 2.7 et 3.2.
Pouvez-vous fournir un exemple démontrant pourquoi vous voudrez peut-être faire cela?
Voulez-vous dire non seulement taper
arg1 code>?Si vous ne fournissez pas
arg1 code> lorsque vous appeleztest code>, alorsarg1 code> sera par défaut sur'foo' code>@Orangeoctopus: Eh bien
arg1 code> peut être écrasé, non?"Bien arg1 peut être écrasé, non?"? Que veux-tu dire par là. Vous ne pouvez pas modifier la valeur par défaut. Mais vous pouvez fournir une valeur d'argumentation. Que voulez-vous dire "écrasé"?
@ S.LOTT: Je veux dire que vous pouvez appeler
test (arg1 = 'bar') code> et avoirarg1 code> la valeur par défaut écrasée. Je ne comprends pas votre question.Ce n'est pas "écraser" quoi que ce soit. Cela simplifie simplement une valeur d'argumentation à un paramètre avec une valeur par défaut.