Remarques sur l'affectation Python3

La définition et l'affectation des fonctions sont de nouveaux objets à chaque fois

Quelque chose qui semble avoir été vu quelque part.

In[1]


def a():
    print('a')
f = a
f()
def a():
    print('b')
f()

Out[1]


a
a

Il en va de même pour λ.

In[2]


a = lambda: print('a')
f = a
f()
a = lambda: print('b')
f()

Out[2]


a
a

S'il ne s'agit pas d'une affectation, il se comporte comme «prévu».

In[3]


a = [1]
f = a
print(f)
a.append(1)
print(f)
a = [2]
a.append(2)
print(f)

Out[3]


[1]
[1, 1]
[1, 1]

Les détails sont comme commentés.

Poule qui a ou n'affecte pas le global

Essayons ce qui se passe lorsque nous l'affectons dans une fonction!

In[4]


l = 1
def a():
    l = 2
a()
l

Out[4]


1

L'activité destructrice a échoué avec succès. Mais utiliser des listes peut être destructeur! dangereux!

In[5]


l = [1]
def a():
    l[0] = 2
a()
l[0]

Out[5]


2

Dokan ... Le point (?) De cette activité destructrice est que vous pouvez changer le contenu sans le passer en argument. Cela se produit certainement lorsque vous définissez des variables dans une fonction et utilisez des fermetures.

Si vous ajoutez à l'argument par défaut, ce sera un gros problème.

PyCharm donne un message aimable comme celui-ci, alors je l'ai essayé.

Default argument value is mutable

This inspection detects when a mutable value as list or dictionary is detected in a default value for an argument. Default argument values are evaluated only once at function definition time, which means that modifying the default value of the argument will affect all subsequent calls of the function.

In[6]


def a(x=[]):
    x.append(1)
    return x
a()
a()
a()

Out[6]


[1,1,1]

Quoi! ?? De même, ce qui suit peut être fait.

In[7]


def a(x=[0]):
    x[0] += 1
    return x[0]
a()
a()
a()

Out[7]


3

Recommended Posts

Remarques sur l'affectation Python3
Mémo de raclage Python
Note d'apprentissage Python_000
Notes d'apprentissage Python
Notes de débutant Python
Note d'apprentissage Python_006
notes de python C ++
Note d'apprentissage Python_005
Notes de grammaire Python
Note sur la bibliothèque Python
notes personnelles python
mémo pandas python
Note d'apprentissage Python_001
notes d'apprentissage python
Notes d'installation de Python3.4
Notes de développement de package Python
notes d'utilisation du décorateur python
Mémo du package d'adresse IP Python
Notes sur le format Python Pickle
Premier mémo divers sur Python
Matlab => Notes de migration Python
Notes sur l'utilisation de sous-processus Python
Python essayer / sauf mémo
Notes sur le flacon de framework Python
mémo python utilisant l'opérateur perl-ternaire
Mémo d'apprentissage O'Reilly python3 Primer
Remarques sur l'utilisation du test unittest standard Python
python * args, ** kwargs Notes d'utilisation
notes python pour l'utilisation de variables spéciales perl
Mémo Python Tkinter (pour moi)
[Python] Notes sur l'analyse des données
Notes d'apprentissage sur l'analyse des données Python
Remarques sur l'installation de Python sur votre Mac
Obtenez des notes Evernote en Python
Remarques sur l'installation de Python sur CentOS
Notes sur Python et les types de dictionnaire
Notes de grammaire minimales pour écrire Python
Remarques sur l'utilisation de MeCab depuis Python
Affectations et modifications des objets Python
Notes personnelles pour le traitement d'images python
Notes personnelles de prétraitement des données Python Pandas
Mémo d'automatisation de saisie par Python débutant
Mémo pour moi graphique csv python
Remarques sur l'installation de Python à l'aide de PyEnv
Notes pour l'entrée / sortie de fichier Python
Notes sur l'utilisation de rstrip avec python.
Remarques sur l'accès à dashDB à partir de python
(Notes personnelles) Métaclasses et métaprogrammation Python
Tests de code dans le temps en Python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Grattage WEB avec Python (pour mémo personnel)
Remarques sur la grammaire Python de l'apprentissage automatique PyQ
Blender 2.82 ou version ultérieure + notes sur l'environnement de développement python
python Remarque: Modularisation: __name__ == Comment utiliser '__ main__'
Note de nfc.ContactlessFrontend () de nfcpy de python
Notes d'apprentissage depuis le début de Python 1
Remarques sur la réalisation de l'OCR japonais avec Python