0基础学python-12:命名空间和作用域

目录

前言

命名空间(Namespace)

特点和用途:

Python中一般有三种命名空间:

命名空间的查找顺序:

作用域(Scope)

[Python 的作用域一共有4种:](#Python 的作用域一共有4种:)

作用域查找顺序:

代码实例:

总结:


前言

命名空间(Namespace) 和**作用域(Scope)**是程序设计中重要的概念,它们有助于组织和管理代码,避免命名冲突并控制变量和函数的可见性和生命周期。

命名空间(Namespace)

命名空间是用来组织和分类代码标识符(如变量、函数、类等)的一种机制。它可以帮助避免命名冲突,特别是在大型项目或多个库之间使用时非常有用。

特点和用途

  • 避免命名冲突:在不同的命名空间中,相同名称的标识符可以共存而不会冲突。
  • 组织代码:通过命名空间可以将相关功能或模块分组,提高代码的结构性和可维护性。
  • 限定作用域:命名空间可以限定其中的标识符在特定的范围内有效,避免全局污染

Python中一般有三种命名空间:

  • 内置名称(Built-in names): Python 语言内置的名称,比如函数名 abs、chr 和异常名称 BaseException、Exception 等等
  • 全局名称(Global names): 模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量
  • 局部名称(Local names):函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量(类中定义的也是)

图解:

命名空间的查找顺序:

局部 命名空间 -> 全局 命名空间 -> 内置命名空间,如果找不到变量 ,它将放弃查找并报错。

作用域(Scope)

作用域定义了变量或函数在程序中的可访问性和生命周期。

Python 的作用域一共有4种:

  • L(Local)局部作用域,包含局部变量,比如一个函数/方法内部
  • E(Enclosing ):嵌套作用域,闭包函数外的函数,包含了非局部(non-local)也非全局(non-global)的变量
  • G(Global ):全局作用域,最外层,比如当前模块的全局变量
  • B(Built-in)内建作用域,包含内建变量/关键字等,最后被搜索

图解:

作用域查找顺序:

局部 找不到,便会去局部外的局部 找(例如闭包),再找不到就会去全局 找,再者去内置中找

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。

代码实例:

python 复制代码
# 全局命名空间和作用域
global_var = 10

def my_function():
    # 函数内的局部作用域
    local_var = 20
    print("Inside my_function:", global_var)  # 可以访问全局变量 global_var
    print("Inside my_function:", local_var)   # 可以访问局部变量 local_var

my_function()

# 命名空间示例
namespace_var = 30

def another_function():
    # 在函数内部使用命名空间
    namespace_var = 40  # 在此作用域内,覆盖了全局的 namespace_var
    print("Inside another_function:", namespace_var)  # 输出 40

another_function()
print("Global namespace_var:", namespace_var)  # 输出 30,因为全局的 namespace_var 没有被修改

输出:

python 复制代码
Inside my_function: 10
Inside my_function: 20
Inside another_function: 40
Global namespace_var: 30

在上述例子中,global_var 是全局变量,可以在任何地方访问。local_varmy_function 函数内的局部变量,只能在该函数内部访问。namespace_var 则演示了在函数内部定义和修改命名空间内的变量,以及全局命名空间的访问。

总结:

综上所述,理解和正确使用命名空间和作用域对于编写清晰、可维护的代码是非常重要的。

相关推荐
s153352 分钟前
6.RV1126-OPENCV 形态学基础膨胀及腐蚀
人工智能·opencv·计算机视觉
jndingxin5 分钟前
OpenCV CUDA模块特征检测------角点检测的接口createMinEigenValCorner()
人工智能·opencv·计算机视觉
先做个垃圾出来………16 分钟前
Python中使用pandas
开发语言·python·pandas
Tianyanxiao17 分钟前
宇树科技更名“股份有限公司”深度解析:机器人企业IPO前奏与资本化路径
人工智能
东京老树根37 分钟前
SAP学习笔记 - 开发18 - 前端Fiori开发 应用描述符(manifest.json)的用途
笔记·学习
道可云1 小时前
道可云人工智能每日资讯|北京农业人工智能与机器人研究院揭牌
人工智能·机器人·ar·deepseek
不爱吃山楂罐头1 小时前
第三十三天打卡复习
python·深度学习
m0_678693331 小时前
深度学习笔记25-RNN心脏病预测(Pytorch)
笔记·rnn·深度学习
艾醒(AiXing-w)1 小时前
探索大语言模型(LLM):参数量背后的“黄金公式”与Scaling Law的启示
人工智能·语言模型·自然语言处理
极光JIGUANG1 小时前
GPTBots在AI大语言模型应用中敏感数据匿名化探索和实践
人工智能