美文网首页Python全栈工程师
15.5-LEGB和函数的销毁

15.5-LEGB和函数的销毁

作者: BeautifulSoulpy | 来源:发表于2019-09-18 16:52 被阅读0次

人的一生中有许许多多的选择,甚至每秒我们都在选择着,正是因为有不同的选择,所以才会有千差万别的结局,才会有千姿百态的人生!

你现在的生活也是由你3年前的选择决定的,而决定你3年后的生活就在于你今天的选择。

本章总结:(20-30)
del 删除 少用、慎用;

作用域、LEGB、闭包、必须掌握:

1. LEGB(Local, Enclosing, Global, Built-ins)

Python会按照LEGB(Local, Enclosing, Global, Built-ins)沿着内层局部命名空间->外层局部命名空间->全局命名空间->内建命名空间的顺序去寻找一个标识符的定义,也就是说,定义于局部命名空间的标识符会覆盖全局命名空间的同名标识符,定义于全局命名空间的标识符会覆盖同名的内建命名空间标识符:

Python中的作用域分4种情况:

L:local,局部作用域,即函数中定义的变量(局部变量);调用时创建,调用结束后消亡;
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:globa,全局变量,就是模块级别定义的变量;模块import时创建,解释器退出时消亡;
B:built-in,系统固定模块里面的变量,比如int, bytearray等。 解释器启动时创建到解释器退出时消亡;

搜索变量的优先级顺序依次是作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB

1. 局部命名空间在函数调用结束后就会消失,因而,局部变量无法在全局命名空间中使用(上例中的x),但是全局变量可以在函数内访问得到。

a = 1
abs = 2
def local():
    b = 1
    a = 3
    print(a)
local()
# 3
print(a)
# 1
print(abs)
# 2

2.函数的销毁

del 语句删除的是标识符, ,理解就行;
del语句慎用,少用,一般再删除字典的时候用一用

局部函数和全局函数的销毁

全局函数的销毁
1.重新定义同名函数;
2.del 语句删除函数对象;
3.程序结束时;

局部函数的销毁:
1.重新再上级作用域定义同名函数;
2.del 语句删除函数名称,函数对象的引用计数 -1;
3.上级作用域销毁时;

函数体的标准格式:

def bar(xyz,a=2, b='abc', c=(4,), *args, m=5, n=[],**kwargs):   # m,n为kwargs
    pass
print(bar.__defaults__)
print(bar.__kwdefaults__)    # 关键字参数**kwargs缺省值给 前面的m,n 关键字;
-----------------------------------------------
(2, 'abc', (4,))
{'m': 5, 'n': []}

相关文章

网友评论

    本文标题:15.5-LEGB和函数的销毁

    本文链接:https://www.haomeiwen.com/subject/slhryctx.html