7
votes

Accéder aux valeurs d'argument par défaut dans Python

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


7 commentaires

Pouvez-vous fournir un exemple démontrant pourquoi vous voudrez peut-être faire cela?


Voulez-vous dire non seulement taper arg1 ?


Si vous ne fournissez pas arg1 lorsque vous appelez test , alors arg1 sera par défaut sur 'foo'


@Orangeoctopus: Eh bien arg1 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') et avoir arg1 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.


4 Réponses :


2
votes

Ricardo Cárenes est sur la bonne voie. En réalité, passez à la fonction 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?

Comme il s'avère, vous pouvez vous reporter à 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


2 commentaires

J'étais aussi sous cette impression, éteignit aussi que test est dans Scope local comme indiqué dans le commentaire de Ricardo sur ma réponse.


Si nous faisons def test2 (): Imprimer les sections locales (), '\ n \ n', globals () , nous voyons que test2 est dans les globaux et il n'y a rien Aux locaux.



0
votes

Ce n'est pas très élégant (du tout), mais cela fait ce que vous voulez: xxx

fonctionne avec python 3.x aussi.


2 commentaires

Pourquoi Globals () ? Test 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.



17
votes

Ils sont stockés dans test.func_default (python 2) et dans test .__ par défaut __ (python 3).

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 .__ kwdefault __


1 commentaires

Voir aussi __ kwdefault __ .



5
votes

considérer: xxx

.func_default vous donne les valeurs par défaut, en tant que séquence, afin que les arguments apparaissent dans votre code. < P> Apparemment, func_default a été supprimé dans Python 3.


1 commentaires

Je pense que func_default ne fonctionne que sur Python 2.x. __ par défaut __ semble fonctionner sur Python 2.7 et 3.2.