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.
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.
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