全局函数销毁
方法一:重新定义同名函数
def foo(a): return a print(foo(1),id(foo),foo.__defaults__) def foo(a): return a print(foo(1),id(foo),foo.__defaults__) 结果: 1 26875848 None 1 27317784 None
- 函数的ID,不同,说明这是两个不同的函数
方法二:使用del 【报错:NameError: name 'foo' is not defined】
def foo(a): return a print(foo(1),id(foo),foo.__defaults__) def foo(a): return a print(foo(1),id(foo),foo.__defaults__) del foo print(foo(1),id(foo),foo.__defaults__) 结果: 1 25237448 None 1 26400280 None NameError: name 'foo' is not defined
全局函数的销毁:
- 重新定义同名函数
- del 语句删除函数对象
- 程序结束时
局部函数的销毁
def foo(xyz=[], u='abc', z=123): xyz.append(1) def inner(a=10): pass print(inner) def inner(a=100): print(xyz) print(inner) return inner bar = foo() print(id(foo),id(bar), foo.__defaults__, bar.__defaults__) del bar print(id(foo),id(bar), foo.__defaults__, bar.__defaults__) 结果: 27269064 31905376 ([1], 'abc', 123) (100,) NameError: name 'bar' is not defined
- bar = foo():返回的是inner的对象
- bar.__defaults__ 返回(100,):说明inner函数的同命函数体已经被覆盖了
局部函数销毁
- 重新在上级作用域定义同名函数
- del 语句删除函数名称,函数对象的引用计数减1
- 上级作用域销毁时