Python:函数的销毁

全局函数销毁

方法一:重新定义同名函数
 

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
  • 上级作用域销毁时

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值