首页 > 编程语言 >0基础学python-12:命名空间和作用域

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

时间:2024-07-15 21:29:19浏览次数:15  
标签:function 12 函数 作用域 空间 var python 命名

目录

前言

命名空间(Namespace)

特点和用途:

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

 命名空间的查找顺序:

作用域(Scope)

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等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。

 

 

代码实例:

# 全局命名空间和作用域
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 没有被修改

输出:

Inside my_function: 10
Inside my_function: 20
Inside another_function: 40
Global namespace_var: 30

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

 

总结:

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

标签:function,12,函数,作用域,空间,var,python,命名
From: https://blog.csdn.net/weixin_65047977/article/details/140448749

相关文章

  • python集合
    一、集合的定义集合可以存放多个元素。方式一:{a,b,c,d},缺点:不能定义空集合。方式二:set(),空集合;set(Iterable),将可迭代类型元素依次放入集合。遍历:forein{1,3,4,5}:将集合中的每一个元素依次赋予e。特性:不重复,可以用于去重;无序,不可以使用下标。#方式一不能定义空......
  • python推导式
    1.格式第一部分:表达式;第二部分:循环;第三部分:条件(可有可无)。 2.列表推导式 结果是列表;格式:[ ]        Python列表推导式是一种简洁的语法,用于从现有的列表或其他可迭代对象中创建新的列表。它的语法有:[expressionforiteminiterableifcondition]其中,expr......
  • AI预测福彩3D采取888=3策略+和值012路或胆码测试7月15日新模型预测第33弹
        周末去外地出差,断更了两天,今天开始恢复每日一发~        今天咱们继续验证新模型的8码定位=3,重点是预测8码定位=3+和值012+胆码。有些朋友看到我最近几篇文章没有给大家提供缩水后的预测详情,在这里解释下:其实我每篇文章中既有8码定位,也有和值012路,也有胆码......
  • Python小工具—批量移除照片背景
    先上代码。fromrembgimportremoveimportcv2importosdeflist_image_files(directory):#支持的图片文件扩展名列表image_extensions=['.jpg','.jpeg','.png','.gif','.bmp','.tiff']#存储找到的图片文件......
  • python中字典的用法
    1.字典的定义在Python中,字典(Dictionary)是一种可变的容器模型,它可以存储任意类型对象,如整数、浮点数、字符串、列表、元组等。字典的每个元素都是一个键值对(key-valuepair)。键(key)用于唯一标识一个元素,而值(value)则是与该键相关联的数据。字典是无序的,即元素的存储顺序与它们的......
  • asyncio/trio fastdfs python client
    Codets.py#!/usr/bin/envpython"""FastDFS并发测试脚本Usage::$python<me>.py200--show"""importfunctoolsimportitertoolsimportjsonimportosimportpickleimportsysimporttimefrompathlibimportPathfr......
  • Python 安装使用图片裁剪脚本
    Sure!Here’saquickguidetoinstallingPythononWindows11:###Step1:DownloadPython1.GototheofficialPythonwebsite:[python.org](https://www.python.org/downloads/)2.Clickthe"DownloadPython"button.Thiswilldownloadthelatestv......
  • python网络编程---TCP协议进行
        在这里简单实现一个TCP服务器,用于监听来自客户端的连接,接收客户端发送的消息,并向客户端发送响应消息。下面我将详细解释这个代码的工作原理和各个部分的作用。    首先建立一个客户端(client),一个服务端(server),在客户端进行连接到运行在本地机器(IP地址为127.......
  • python中的re模块--正则表达式
    正则表达式,又称规则表达式。(英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本  re模块作用通过使用正则表达式,可以:测试字符串内的模式。——例如,可以测试输入字符串,以查......
  • Python从0到100(三十九):数据提取之正则(文末免费送书)
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......