人的一生中有许许多多的选择,甚至每秒我们都在选择着,正是因为有不同的选择,所以才会有千差万别的结局,才会有千姿百态的人生!
你现在的生活也是由你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': []}