名称空间
1、存放变量名与变量值绑定关系的地方
2、值存放在内存中,有一个内存地址,变量名指向地址
3、可是有很多变量名,可能分别指向不同的地址
4、所以需要一个空间来存放变量名指向的地址
1.内置名称空间
python语言内置的函数,也就是存放在python解释器中的
如:len() print()
2.全局名称空间
usestr = '今天是3月17号'
def index():
print(usestr)
3.局部名称空间
函数体代码运行产生的都是局部名称空间
def index():
name = 'zhangqiang'
1.内置名称空间
关闭 销毁
2.全局名称空间
3.局部名称空间
名字的查找顺序
1.如果在局部名称空间
局部名称空间 >>> 全局名称空间 >>> 内置名称空间
2.如果在全局名称空间
全局名称空间 >>> 内置名称空间
'''局部名称空间之间如果不是嵌套关系 那么互不干涉!!!'''
def index1():
name = 'zhangqiang'
def index2():
age = 18
print(name)
index1()
index2()
作用域
'''为什么内置名称空间和全局名称空间都是全局有效'''
内置名称空间
程序任意阶段任意位置均可使用(全局有效)
全局名称空间
程序任意阶段任意位置均可使用(全局有效)
局部名称空间
一般情况下只在各自局部名称空间中有效(局部有效)
global与nonlocal关键字
'''gloabl关键字:局部修改全局不可变类型'''
x = 111
def index():
global x
x = 666
index()
print(x)
"""
如果想要在局部修改全局的不可变类型
需要提前加关键字global申明
如果想要在局部修改全局的可变类型
不需要加关键字global申明
"""
def index():
x = 111
l1 = [11, 22, 33]
def f1():
l1.append(44)
f1()
print(x)
print(l1)
index()
"""
局部名称空间嵌套的情况下 内层如果想要修改外层
情况1数据是不可变类型
需要使用关键字nonlocal
情况2数据是可变类型
不需要使用关键字nonlocal
"""
函数名的多种用法
1.函数名可以当做变量名赋值
2.函数名还可以当成函数的实参
3.函数名还可以当做函数的返回值
4.函数名可以作为容器类型的元素
函数的嵌套
name = "Alex"
def change_name():
name = "Alex2"
def change_name2():
name = "Alex3"
print("第3层打印", name)
change_name2()
print("第2层打印", name)
change_name()
print("最外层打印", name)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现