x=True
def stupid():
x=False
stupid()
print x
Répondre
Vous n'avez pas besoin de déclarer une variable fonction-locale en Python. Le "x = False" fait référence à un x local à stupid(). Si vous voulez vraiment modifier les x globales à l'intérieur stupide:
def stupid():
global x
x=False
Notez que si vous avez fait 'print x' dans la fonction, vous utiliserez le' x' global. C'est seulement * assignment * qui crée la nouvelle variable locale. – quark
Le x dans la fonction stupide() est une variable locale, vous avez vraiment 2 variables nommées x.
Parce que la portée de x est locale à la fonction stupide(). une fois que vous appelez la fonction et qu'elle se termine, vous êtes hors de portée, et vous imprimez la valeur de "x" définie en dehors de la fonction stupide() - et le x défini à l'intérieur de la fonction stupide() n'existe pas sur la pile plus (une fois que la fonction se termine)
modifier après votre commentaire:
la extérieure x est référencé lorsque vous avez imprimé, tout comme vous l'avez fait.
le intérieur x ne peut être référencé que lorsque vous êtes dans la fonction stupide(). Vous pouvez donc imprimer à l'intérieur de cette fonction pour voir quelle est la valeur du x à l'intérieur de cette fonction.
A propos de "global"
- cela fonctionne & répond à la question, apparemment
- pas une bonne idée d'utiliser tout ce que souvent
- provoque des problèmes de lisibilité et d'évolutivité (et potentiellement plus)
- Selon votre projet, vous pouvez reconsidérer en utilisant une variable globale définie à l'intérieur d'une fonction locale.
Ajoutez "global x" avant x = False dans la fonction et il affichera True. Sinon, il y a deux "x", chacun dans une portée différente.
Pour répondre à votre question suivante, utilisez global
:
x=True
def stupid():
global x
x=False
stupid()
print x
haha bonne réponse préventive. – Triptych
Si vous souhaitez accéder à la variable globale x à partir d'une méthode en python, vous devez le faire explicitement:
x=True
def stupid():
global x
x=False
stupid()
print x
Bizarre hoquet là-bas. :( – Stobor
- Étant donné que vous effectuez une affectation à
x
à l'intérieur destupid()
, Python crée un nouveaux
à l'intérieur destupid()
. - Si vous ne lecture de l'intérieur
x
stupid()
, Python serait en fait utiliser lax
globale, qui est ce que vous vouliez. - Pour forcer Python à utiliser le
x
global, ajoutezglobal x
comme première ligne à l'intérieur destupid()
.
Si ce code est tout à l'intérieur d'une fonction que, global
ne va pas travailler, car alors x
ne serait pas une variable globale. Dans Python 3.x, ils ont introduit le mot-clé nonlocal
, ce qui rendrait le travail de code, peu importe que ce soit au niveau supérieur ou à l'intérieur d'une fonction:
x=True
def stupid():
nonlocal x
x=False
stupid()
print x
- 1. Comment faire pour compiler ce programme Python?
- 2. programme Python commencer
- 3. en asp.net ce qui différencie Request.IsAuthenticated = true
- 4. PHP true & 'true' difference
- 5. Pourquoi la valeur x change-t-elle dans ce programme?
- 6. Pouvez-vous comprendre pourquoi ce programme déclenche une exception IllegalStateException?
- 7. JFrame.setDefaultLookAndFeelDecorated (true);
- 8. Pourquoi Request.IsSecureConnection retourne-t-il faux lorsque true est attendu
- 9. Pourquoi utiliser 'redirect = true' dans struts 1. * forward?
- 10. Pourquoi @ ($ null) est $ false, mais @ ($ null, $ null) est $ true?
- 11. XmlNodeList (pourquoi est-ce vide)
- 12. Contrôle par programme de l'optimisation python?
- 13. Comment générer plusieurs scripts python à partir d'un programme python?
- 14. Problème lors de l'exécution d'un programme Python très simple
- 15. Pourquoi ce code C buggé?
- 16. Pourquoi KeyboardInterrupt ne fonctionne pas en python?
- 17. pourquoi ce programme donne-t-il une erreur d'exécution sur jcreator mais pas sur netbeans?
- 18. Est-ce idiot pythonic? (someBool et "True Result" ou "False Result")
- 19. Programme de socket Python vs C++ (Winsock)
- 20. Pourquoi y a-t-il des lignes vides supplémentaires dans ma sortie du programme python?
- 21. flux de contrôle du programme en Python
- 22. True color CImageList
- 23. Appeler un programme externe de python
- 24. True Enterprise Reporting
- 25. Édition par programme de la source Python
- 26. Pourquoi est-bash parfois pas de sortie au ras d'un programme python dans un fichier
- 27. Interrompre le programme Python dans une DLL
- 28. Arrêtez par programme l'exécution du script python?
- 29. Pourquoi ce unbind ne fonctionne pas?
- 30. Comportement inattendu de setParseIntegerOnly (true)
ok suivi, comment puis-je faire référence à l'extérieur x ? –
wow, quelqu'un a répondu qu'avant de le demander :) –
Remplacez maintenant 'x = True' par' x = [1] ', et remplacez x = False' par' x [0] = 2' et réexécutez votre code .. –