python基础之名称空间
名称空间
1.名称空间分类
| |
| |
| name = 'jason' |
| 1 在内存空间内申请一块地方 存放'jason' |
| 2 将'jason'绑定一个变量名name |
| 3 后续通过变量名name就可以访问到'jason'所在的内存地址 |
| del name表示清除该绑定关系 |
| |
| 名称空间:用来存储变量名与数据值绑定关系的地方(我们也可以简单理解为就是存储变量名的地方)del name |
| 变量名(name)则是存放在名称空间 |
| |
| 1.内置名称空间 |
| |
| 解释器运行自动产生,里面包含了很多名字 |
| 系统自带的空间,已经提前准备好了很多关键字和变量名 |
| |
| <built-in function len> |
| |
| 2.全局名称空间 |
| py文件运行产生,里面存放文件级别的名字() |
| 模块名、变量名、函数名、类名 |
| |
| |
| import sys |
| |
| x=1 |
| |
| if x == 1: |
| y=2 |
| |
| def foo(x): |
| y=1 |
| def bar(): |
| pass |
| |
| Class Bar: |
| pass |
| |
| 3.局部名称空间 |
| 函数体代码运行、类体代码 产生的空间 |
2.名称空间存活周期及作用范围(域)
| 名称空间的加载顺序是: |
| 内置名称空间->全局名称空间->局部名称空间 |
| |
| 1.存活周期 |
| 内置名称空间 |
| python解释器启动则创建,关闭则销毁 |
| 全局名称空间 |
| py文件执行则创建,运行结束则销毁 |
| 局部名称空间 |
| 函数体代码、(类体代码)运行则创建,函数体代码结束则销毁 |
| 2.作用域 |
| 内置名称空间 |
| 解释器级别的全局有效 |
| 全局名称空间 |
| py文件级别的全局有效 |
| 局部名称空间 |
| 函数体代码内有效 |
3.名字的查找顺序
| |
| 查找顺序: |
| 局部名称空间->全局名称空间->内置名称空间 |
| |
| -> 先在各个空间查找这个名字 |
| 1当我们在局部名称空间中的时候 |
| 局部名称空间>>> 全局名称空间>>> 内置名称空间 |
| 2当我们在全局名称空间中的时候 |
| 全局名称空间>>> 内置名称空间 |
| |
| |
| 1.相互独立的的局部名称空间默认不能相互访问 |
| def func1(): |
| name = 'jason' |
| print(age) |
| |
| def func2(): |
| age = 12 |
| print(name) |
相互独立的的局部名称空间默认不能相互访问
| 2.局部名称空间嵌套 |
| 先从自己的局部名称空间查找,然后由内而外依次查找 |
| |
| |
| x = 'tes居然输了' |
| def func1(): |
| x = 1 |
| def func2(): |
| x = 2 |
| def func3(): |
| print(x) |
| x = 3 |
| func3() |
| func2() |
| func1() |
案例中代码运行的顺序

嵌套函数内部的逻辑错误
作业
| 1.判断下列money的值是多少并说明理由 思考如何修改而不是新增绑定关系 |
| money = 100 |
| def index(): |
| money = 666 |
| print(money) |
| |
| |
| |
| money = 100 |
| def func1(): |
| money = 666 |
| def func2(): |
| money = 888 |
| func2() |
| print(money) |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY