Hinweise zur Python3-Zuweisung

Funktionsdefinition und Zuweisung sind jedes Mal neue Objekte

Etwas, das irgendwo gesehen worden zu sein scheint.

In[1]


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

Out[1]


a
a

Gleiches gilt für λ.

In[2]


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

Out[2]


a
a

Wenn es sich nicht um eine Zuweisung handelt, verhält es sich "beabsichtigt".

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]

Details sind wie kommentiert.

Henne, die das Globale hat oder nicht beeinflusst

Versuchen wir mal, was passiert, wenn wir es in einer Funktion zuweisen!

In[4]


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

Out[4]


1

Die zerstörerische Aktivität ist erfolgreich gescheitert. Die Verwendung von Listen kann jedoch destruktiv sein! gefährlich!

In[5]


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

Out[5]


2

Dokan ... Der Punkt (?) Dieser destruktiven Aktivität ist, dass Sie den Inhalt ändern können, ohne ihn als Argument zu übergeben. Dies ist sicherlich der Fall, wenn Sie Variablen in einer Funktion definieren und Abschlüsse verwenden.

Wenn Sie an das Standardargument anhängen, wird dies eine große Sache sein.

PyCharm gibt eine freundliche Nachricht wie die folgende, also habe ich es versucht.

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]

Was! ?? In ähnlicher Weise kann Folgendes durchgeführt werden.

In[7]


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

Out[7]


3

Recommended Posts

Hinweise zur Python3-Zuweisung
Python-Scraping-Memo
Python lernen note_000
Python-Lernnotizen
Python-Anfängernotizen
Python lernen note_006
Python C ++ Notizen
Python lernen note_005
Python-Grammatiknotizen
Python Library Hinweis
Python persönliche Notizen
Python Pandas Memo
Python lernen note_001
Python-Lernnotizen
Installationshinweise zu Python3.4
Hinweise zur Entwicklung von Python-Paketen
Verwendungshinweise für Python Decorator
Python-IP-Adresse Paket Memo
Notizen im Python Pickle-Format
Erstes Python-Memo
Matlab => Python-Migrationsnotizen
Hinweise zur Verwendung von Python-Unterprozessen
Python versuchen / außer Memo
Hinweise zur Python-Framework-Flasche
Python-Memo mit perl-ternärem Operator
O'Reilly python3 Primer Lernnotiz
Hinweise zur Verwendung des Python-Standards unittest
python * args, ** kwargs Verwendungshinweise
Python-Notizen zur Verwendung von Perl-Spezialvariablen
Python Tkinter Memo (für mich)
[Python] Hinweise zur Datenanalyse
Lernnotizen zur Python-Datenanalyse
Hinweise zur Installation von Python auf Ihrem Mac
Holen Sie sich Evernote-Notizen in Python
Hinweise zur Installation von Python unter CentOS
Hinweise zu Python- und Wörterbuchtypen
Minimale Grammatiknotizen zum Schreiben von Python
Hinweise zur Verwendung von MeCab aus Python
Zuweisungen und Änderungen in Python-Objekten
Persönliche Notizen für die Python-Bildverarbeitung
Persönliche Notizen zur Vorverarbeitung von Python Pandas-Daten
Typisierungsautomatisierungsnotiz von Python-Anfängern
Memo für mich Python CSV Graph
Hinweise zur Installation von Python mit PyEnv
Hinweise zur Eingabe / Ausgabe von Python-Dateien
Hinweise zur Verwendung von rstrip mit Python.
Hinweise zum Zugriff auf dashDB über Python
(Persönliche Notizen) Python-Metaklassen und Metaprogrammierung
Code-Tests rund um die Uhr in Python
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
WEB-Scraping mit Python (für persönliche Notizen)
Hinweise zur Python-Grammatik für maschinelles Lernen in PyQ
Blender 2.82 oder höher + Hinweise zur Python-Entwicklungsumgebung
Python Hinweis: Modularisierung: __name__ == Verwendung von '__ main__'
Anmerkung von nfc.ContactlessFrontend () von nfcpy von Python
Notizen vom Anfang von Python 1 lernen
Hinweise zur japanischen OCR mit Python