Que fait l' nonlocal
instruction Python (dans Python 3.0 et versions ultérieures)?
Il n'y a pas de documentation sur le site officiel de Python et help("nonlocal")
ne fonctionne pas non plus.
Que fait l' nonlocal
instruction Python (dans Python 3.0 et versions ultérieures)?
Il n'y a pas de documentation sur le site officiel de Python et help("nonlocal")
ne fonctionne pas non plus.
"There is no documentation for nonlocal".
En fait, vous pouvez le fairehelp(keyword_in_string)
pour les documentations en Python 3 et supérieurRéponses:
Comparez cela, sans utiliser
nonlocal
:Pour cela, en utilisant
nonlocal
, oùinner()
« sx
est maintenantouter()
» sx
:la source
En bref, il vous permet d'affecter des valeurs à une variable dans une étendue externe (mais non globale). Voir PEP 3104 pour tous les détails sanglants.
la source
Une recherche google pour "python non local" a abouti à la proposition, PEP 3104 , qui décrit pleinement la syntaxe et le raisonnement derrière la déclaration. en bref, il fonctionne exactement de la même manière que l'
global
instruction, sauf qu'il est utilisé pour faire référence à des variables qui ne sont ni globales ni locales à la fonction.Voici un bref exemple de ce que vous pouvez faire avec cela. Le générateur de compteur peut être réécrit pour l'utiliser afin qu'il ressemble davantage aux idiomes des langues avec fermetures.
Évidemment, vous pouvez écrire ceci en tant que générateur, comme:
Mais alors que c'est du python parfaitement idiomatique, il semble que la première version serait un peu plus évidente pour les débutants. Utiliser correctement les générateurs, en appelant la fonction retournée, est un point commun de confusion. La première version renvoie explicitement une fonction.
la source
nonlocal
instruction en Python; Si vous voulez une séquence de nombres naturels, l'idiome python est en faititertools.count()
@ooboo:
Il prend celui "le plus proche" du point de référence dans le code source. C'est ce qu'on appelle le "Lexical Scoping" et il est standard depuis plus de 40 ans maintenant.
Les membres de classe de Python sont vraiment dans un dictionnaire appelé
__dict__
et ne seront jamais atteints par la portée lexicale.Si vous ne spécifiez pas
nonlocal
mais que vous le faitesx = 7
, cela créera une nouvelle variable locale "x". Si vous le spécifieznonlocal
, il trouvera le "x" le plus "proche" et l'affectera à cela. Si vous spécifieznonlocal
et qu'il n'y a pas de "x", cela vous donnera un message d'erreur.Le mot-clé
global
m'a toujours paru étrange car il ignorera volontiers tous les autres "x" à l'exception du plus externe. Bizarre.la source
Source: Référence du langage Python
la source
help()
sur des mots clés (et maintenant mon esprit est époustouflé:help()
sans argument, il devient interactif ).Citation de la référence Python 3 :
Comme indiqué dans la référence, dans le cas de plusieurs fonctions imbriquées, seule la variable dans la fonction englobante la plus proche est modifiée:
La variable "la plus proche" peut être à plusieurs niveaux:
Mais il ne peut pas s'agir d'une variable globale:
la source
la source
Ma compréhension personnelle de la déclaration "non locale" (et excusez-moi car je suis nouveau sur Python et la programmation en général) est que le "non local" est un moyen d'utiliser la fonctionnalité globale dans les fonctions itérées plutôt que le corps du code lui-même . Une instruction globale entre les fonctions si vous le souhaitez.
la source
avec les fonctions internes «non locales» (c'est-à-dire les fonctions internes imbriquées) peuvent obtenir la permission de lecture et « écriture » pour cette variable spécifique de la fonction parent externe . Et non local ne peut être utilisé qu'à l'intérieur de fonctions internes, par exemple:
la source