【APF三维路径规划】人工势场APF复杂山地模型下无人机路径规划【含Matlab源码 14819期】
2026/1/3 20:41:55
本文主要介绍命名空间与作用域的概念和关系等相关知识。
命名空间可以理解为变量名和其对应对象之间的映射关系。Python 使用字典来实现命名空间,确保不同上下文中的名称不会冲突。
python# 示例:不同命名空间中的同名变量不会冲突deffunc1():x=10# func1的局部命名空间print(f"func1中的x:{x}")deffunc2():x=20# func2的局部命名空间(与func1的x无关)print(f"func2中的x:{x}")global_x=30# 全局命名空间func1()# 输出: func1中的x: 10func2()# 输出: func2中的x: 20print(f"全局的x:{global_x}")# 输出: 全局的x: 30| 类型 | 内容 | 示例 |
|---|---|---|
| 内置命名空间 | Python内置函数、异常 | print(), len(), ValueError |
| 全局命名空间 | 模块级别定义的名称 | 模块变量、函数、类 |
| 局部命名空间 | 函数内部定义的名称 | 参数、局部变量 |
python# 内置命名空间:Python启动时自动创建print("内置函数示例:",abs(-5),len([1,2,3]))# 全局命名空间:模块级别定义GLOBAL_VAR="我是全局变量"defglobal_func():return"我是全局函数"# 局部命名空间:函数内部定义deflocal_example(param):local_var="局部变量"print(f"参数:{param}, 局部变量:{local_var}")| 命名空间类型 | 创建时间 | 销毁时间 |
|---|---|---|
| 内置命名空间 | Python解释器启动时 | Python解释器退出时 |
| 全局命名空间 | 模块被导入时 | Python解释器退出时 |
| 局部命名空间 | 函数被调用时 | 函数执行结束或异常退出 |
python# 演示局部命名空间的生命周期defcounter():"""每次调用都会创建新的局部命名空间"""count=0# 每次调用时重新创建count+=1returncountprint(counter())# 输出: 1print(counter())# 输出: 1(不是2,因为每次都是新命名空间)作用域是代码中可以访问某个命名空间的区域,而命名空间是变量存储的容器。
python# 作用域的静态性示例defouter():x="outer"# outer函数的作用域definner():print(x)# 可以访问outer的x(作用域嵌套)returninner func=outer()func()# 输出: outer(即使outer已执行完,inner仍记得x)Python按照 LEGB规则 搜索变量:
python# L: Local 局部作用域(函数内部)# E: Enclosing 嵌套作用域(外层函数)# G: Global 全局作用域(模块级别)# B: Built-in 内置作用域# 内置作用域 (B)# print, len, abs 等内置函数# 全局作用域 (G)global_var="global"defouter():# 嵌套作用域 (E)enclosing_var="enclosing"definner():# 局部作用域 (L)local_var="local"# Python按 LEGB 顺序搜索变量:# 1. 先在 Local 作用域查找 local_var# 2. 再到 Enclosing 作用域查找 enclosing_var# 3. 再到 Global 作用域查找 global_var# 4. 最后到 Built-in 作用域查找内置名称print(local_var)# 找到print(enclosing_var)# 找到print(global_var)# 找到print(len([1,2,3]))# 使用内置函数inner()outer()python# 访问全局变量(需声明 global)count=0defincrement():globalcount# 声明使用全局变量count+=1returncountprint(increment())# 1print(increment())# 2# 访问嵌套作用域变量(需声明 nonlocal)defouter():counter=0definner():nonlocalcounter# 声明使用外层变量counter+=1returncounterreturninner closure=outer()print(closure())# 1print(closure())# 2| 特性 | 命名空间 | 作用域 |
|---|---|---|
| 本质 | 名称到对象的映射 | 可访问命名空间的代码区域 |
| 实现 | 字典结构 | 代码结构决定 |
| 特性 | 动态创建/销毁 | 静态确定 |
| 关系 | 容器(存储变量) | 权限(访问变量) |