Heim > Fragen und Antworten > Hauptteil
x = 1
if x > 0:
print('true')
else:
print('false')
Wir alle wissen, dass die else-Anweisung nicht ausgeführt wird, wenn x >
Python ist eine interpretierte Sprache für Funktionen, Beispiel 1
# filename test.py
def test1():
pass
# test1()
1. Wenn die Codezeile test1() den Aufruf der Funktion test1 nicht ausführt, ist das gesamte Programm grundsätzlich bedeutungslos, es findet keine Speicherzuweisung statt
2 Für Python wird ein Test1-Funktionsobjekt erstellt und dann eine Reihe von Vorgängen in Test1 gespeichert. Diese Vorgänge werden nicht ausgeführt. Auch wenn das gesamte Programm keine Aufrufe an Test1 durchführt, bleibt Test1 immer bestehen da das Programm nicht im Speicher endet.Aus diesem Grund wird die Funktion test1 nach der Ausführung des Programms zum Attribut des aktuellen Modulobjekts, nämlich
.
3. Der Funktionsname „test1“ bezieht sich auf dieses Funktionsobjekt. Selbst wenn die Funktion nicht aufgerufen wird, wird sie vom Garbage-Collection-Mechanismus nicht recycelt
module __main__
Verschachtelte Funktionsbeispiel 2
# filename test.py
def test1():
def test2():
pass
# return test2()
# test1()
Zum Beispiel 1: Ist mein Verständnis falsch? >>> class A(object):
a = []
def test1(self):
pass
@classmethod
def test2(cls):
print('cls.a', sys.getrefcount(cls.a))
print('cls.test1:', sys.getrefcount(cls.test1))
>>> A.test2()
('cls.a', 2)
('cls.test1:', 1)
>>> def test3():
def test4():
pass
>>> sys.getrefcount(test3)
2
>>> dir(test3)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
# sys.getrefcount(test4) NameError: name 'test4' is not defined
def test3():
def test4():
pass
return test4 # return test4()
PHP中文网2017-06-12 09:27:49
建議以後這問題拆成兩個不同問題。
(1)没有调用该函数, Python還有另一個内存管理策略 reference counting:「原理: 记录一个对象被其他对象引用的次数. 当对这个对象的引用移除了, 引用计数也减小了. 要是减到0了, 这个对象也就被释放了」。所以我猜,應該是在reference counting 時已回收了。
(2)有沒有調用就是看某個對象的引用是否移除了,還有是否有reference cycle,這裡的郵件討論串有一個類近的討論,不知道算不算回答了你這個問題。