Day12
总结
名称空间
# 名称空间
名称空间是存放变量名与变量值绑定关系
# 名称空间分类
1.内置名称空间,python自带的,启动时就有的
print() input()
2.全局名称空间,调用的时候才会产生全局名称空间
3.局部名称空间,函数体内定义的变量
var1 = 1 # var1 是全局名称
def func():
var2 = 2 # var2 是局部名称
# 存活周期
1.内置名称空间
python解释器运行时产生,关闭时销毁
2.全局名称空间
py文件运行时产生,关闭时结束
3.局部名称空间
函数体代码运行时产生,关闭时销毁
名字查找顺序
# 在查找名字是要知道自己在哪个空间
1.若在局部名称空间
局部空间->全局名称空间->内置名称空间
2.若在全局名称空间
全局名称空间->内置名称空间
def index():
len = '局部名称空间中的len'
print(len)
index()
print(len) # 先打印局部名称空间中的len 再打印全局名称空间中的len
# 如果函数没有被调用 那么不要去管函数体代码有多复杂 先跳过
# 局部名称空间之间如果不是嵌套关系 那么它们互不干涉
:
作用域
# 作用域
作用域就是名称空间能作用的范围
'''
内置名称空间:任意阶段均可使用(全局有效)
全局名称空间:任意阶段均可使用(全局有效)
局部名称空间:一般只在局部名称空间有效(局部有效)
# 并不绝对,可以打破
'''
# gloabl关键字:局部修改全局不可变类型
var = 1
def index():
global var # 通过局部名称空间修改全局的var
var = 2
index()
print(var) # 2
# nolocal关键字:局部名称空间嵌套写,内层可以通过nolocal修改外层
def func():
num = 10
def func1():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
func1()
print(num)
func()
'''
修改全局的不可变类型,需要提前加关键字申明,修改的可变类型,不需要加关键字申明
'''
函数名多种用法
1.函数名用作变量名赋值
def func():
print('from function func')
res = func
print(res)
res() # from function func
2.函数名当做函数的实参
def func():
print('from function func')
def func1(a):
print('from func1')
print(a)
a()
func1(func) # <function func at 0x00000281B5B91EA0>
3.函数名用作函数的返回值
def func():
print('from function func')
return func1()
def func1():
print('from func1')
func() # from function func \n from func1
4.函数名用作容器类型的元素
# 容器类型:内部可以存档多个元素的数据类型
def func():
print('from function func')
l1 = [1, 2, 3, 4, func()]
print(l1)
l1[-1] # from function func \n [1, 2, 3, 4, None]
函数的嵌套
# 函数的嵌套调用
def func():
func1()
print('12345')
def func1():
print('98765')
func() # 98765 \n 12345
# 函数的定义
def func(cmd):
def login():
print('登录')
def register():
print('注册')
if cmd == '1':
login()
elif cmd == '2':
register()
else:
print('对不起做不到')
cmd = input('请输入功能编号>>>:')
func(cmd)
今天学了好多理论,要理解的有点多
:

浙公网安备 33010602011771号