Rumah > Soal Jawab > teks badan
x = 1
if x > 0:
print('true')
else:
print('false')
Kita semua tahu bahawa apabila x > 0, pernyataan else tidak akan dilaksanakan, Python ialah bahasa yang ditafsirkan untuk fungsi, contoh 1
# filename test.py
def test1():
pass
# test1()
1. Untuk Java, jika baris kod test1() tidak melaksanakan panggilan ke fungsi test1, maka keseluruhan program pada dasarnya tidak bermakna, tidak akan ada peruntukan memori, dan tidak akan ada pelaksanaan
2 untuk python, objek fungsi test1 akan dibuat, dan kemudian satu siri operasi dalam test1 akan disimpan kerana program tidak berakhir dalam ingatan.
Adapun sebabnya, selepas program dijalankan, fungsi test1 akan menjadi atribut objek modul semasa, iaitu
. module __main__
3 Bagi nama fungsi 'test1', ia merujuk kepada objek fungsi ini, jadi walaupun fungsi itu tidak dipanggil, mekanisme pengumpulan sampah tidak akan mengitar semulanya
# filename test.py
def test1():
def test2():
pass
# return test2()
# test1()
>>> 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
Adalah disyorkan untuk membahagikan soalan ini kepada dua soalan berbeza pada masa hadapan.
(1) Fungsi ini tidak dipanggil Python mempunyai strategi pengurusan memori yang lain, pengiraan rujukan: "Prinsip: Rekod bilangan kali objek dirujuk oleh objek lain. Apabila rujukan kepada objek ini dialih keluar, kiraan rujukan juga akan dikeluarkan. dikurangkan jika dikurangkan kepada 0, objek akan dilepaskan." Jadi saya rasa, ia sepatutnya dikitar semula semasa pengiraan rujukan.
(2) Sama ada ia dipanggil bergantung pada sama ada rujukan objek telah dialih keluar dan sama ada terdapat kitaran rujukan Terdapat perbincangan serupa dalam urutan perbincangan e-mel di sini.