[Mémo] Le mystère des instructions d'affectation cumulative dans les fonctions Python

Qu'est-ce qu'une déclaration d'affectation cumulative?

Déclaration d'affectation cumulative

L'instruction d'affectation cumulative est une combinaison d'opérations binaires et d'instructions d'affectation en une seule instruction.

Mystère

>>> a = 1
>>> a = a + 1   
>>> a
2
>>> a = 1
>>> def f():
...     b = a + 1
... 	return b
... 
>>> f()
2
>>> a = 1
>>> def f():
... 	a = a + 1
... 	return a
... 
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
UnboundLocalError: local variable 'a' referenced before assignment

Addendum 1

>>> a = 1
>>> def f():
... 	global a
... 	a = a + 1
... 	return a
...  
>>> f()
2

Addendum 2 Résoudre le mystère

Pourquoi est-ce que j'obtiens une UnboundLocalError quand une variable a une valeur?

Selon lui, cela semble s'expliquer ainsi.

C'est parce que lorsque vous affectez à une variable dans une portée, cette variable devient locale à cette portée et masque la variable du même nom dans la portée externe.

Merci à @gotta_dive_into_python

Addendum 3 Et à un nouveau mystère

J'expérimente que "lors de l'assignation à une variable dans une certaine portée, cette variable devient locale à cette portée" et que c'est la même chose enregistrée dans locals (), etc. Il y a un autre mystère dans ma maison.

>>> def f():
... 	a = locals()
... 	return a
... 
>>> f()
{}
>>> def f():
... 	a = locals()
... 	b = 1
... 	return a
... 
>>> f()
{}
>>> def f():
... 	a = locals()
... 	b = locals()
... 	return a
... 
>>> f()
{'a': {...}}

Recommended Posts

[Mémo] Le mystère des instructions d'affectation cumulative dans les fonctions Python
Vérifiez le comportement du destroyer en Python
Résumé de diverses instructions for en Python
Le résultat de l'installation de python sur Anaconda
Principes de base pour exécuter NoxPlayer en Python
À la recherche du FizzBuzz le plus rapide en Python
Sortie du nombre de cœurs de processeur en Python
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Récupérer l'appelant d'une fonction en Python
Faites correspondre la distribution de chaque groupe en Python
Afficher le résultat du traitement de la géométrie en Python
Copiez la liste en Python
Découvrez la fraction de la valeur saisie en python
Trouvez la solution de l'équation d'ordre n avec python
L'histoire de la lecture des données HSPICE en Python
[Note] À propos du rôle du trait de soulignement "_" en Python
Résolution d'équations de mouvement en Python (odeint)
Sortie sous la forme d'un tableau python
Obtenez la date de mise à jour du fichier de mémorandum Python.
[Python] Mémo sur les fonctions
le zen de Python
# 4 [python] Bases des fonctions
Découvrez la bonne efficacité de calcul de la vectorisation en Python
Le mémo Python le plus simple au Japon (classes et objets)
Comment obtenir le nombre de chiffres en Python
[python] Récupère la liste des classes définies dans le module
L'histoire de FileNotFound en Python open () mode = 'w'
La douleur de gRPC en utilisant Python. Novembre 2019. (Mémo personnel)
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Implémenter la solution de l'algèbre de Riccati en Python
Obtenir la taille (nombre d'éléments) de Union Find en Python
Ne pas être conscient du contenu des données en python
Reproduire l'exemple d'exécution du chapitre 4 de Hajipata en Python
Utilisons les données ouvertes de "Mamebus" en Python
Implémentation de l'algorithme "Algorithm Picture Book" en Python3 (Heap Sort Edition)
[Python] Affiche toutes les combinaisons d'éléments de la liste
Obtenez l'URL de la destination de la redirection HTTP en Python
Un mémorandum sur la mise en œuvre des recommandations en Python
Reproduire l'exemple d'exécution du chapitre 5 de Hajipata en Python
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Vérifiez la nature atrophique de la distribution de probabilité en Python
Note Python: Le mystère de l'attribution d'une variable à une variable
Mémo de connexion SSH utilisant ProxyCommand de ssh_config en Python
Une note qui implémente une tâche en Python qui charge un fichier GCS dans BigQuery
Essayez de gratter les données COVID-19 Tokyo avec Python
Découvrez la largeur apparente d'une chaîne en python
Vers la retraite de Python2
Mesurons le résultat de l'exécution du programme avec C ++, Java, Python.
Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
Trouver des erreurs en Python
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
Calculez des millions de chiffres dans la racine carrée de 2 avec python
Avoir le graphique d'équation de la fonction linéaire dessiné en Python
Implémentation de l'algorithme de "Algorithm Picture Book" en Python3 (Bubble Sort)
Obtenez le nombre d'éléments spécifiques dans la liste python