详解Python 中的命名空间、变量和范围

目录
  • Python 中的命名空间、变量和范围
  • 什么是命名空间?
  • 变量和表达式
  • 变量范围

Python 中的命名空间、变量和范围

什么是命名空间?

首先,我们需要感知python中的名称(标识符)是什么。众所周知,在python中,一切都是对象。名称帮助我们访问底层对象。例如,当我们做作业时 a = 1 , 1 是存储在内存中的对象,a 是我们与之关联的名称。我们可以通过内置函数获取某个对象的地址(在 RAM 中), ID() .让我们看看如何使用它。

 a = 1
 打印('id(1)=',id(1))  

 打印('id(a)=',id(a)) 输出: id(1) = 9801248
 id(a) = 9801248

在这里,两者都指同一个对象 1 ,所以他们拥有相同的id。

现在我们知道了名称是什么,我们可以继续讨论名称空间的概念。简单地说,命名空间是名称的集合。在 Python 中,您可以将命名空间想象为您定义的每个名称到相应对象的映射。不同的命名空间可以在给定时间共存,但完全隔离。当我们启动 Python 解释器时,会创建一个包含所有内置名称的命名空间,并且只要解释器​​运行,它就存在。这就是内置函数像 ID() , 打印() 我们始终可以从程序的任何部分获得等。每个模块创建自己的全局命名空间。这些不同的命名空间是隔离的。因此,不同模块中可能存在的相同名称不会发生冲突。

变量和表达式

要将现实世界的问题转化为可以通过算法解决的问题,有两个相互关联的任务。首先,选择变量,其次,找到与这些变量相关的表达式。变量是附加在对象上的标签;它们不是对象本身。它们也不是对象的容器。变量不包含对象,而是充当对象的指针或引用。例如,考虑以下代码:

在这里,我们创建了一个变量 a,它指向一个列表对象。我们创建另一个变量 b,它指向同一个列表对象。当我们向这个列表对象追加一个元素时,这种变化会同时反映在 a 和 b 中。

Python 是一种动态类型语言。在程序执行期间,变量名可以绑定到不同的值和类型。例如,每个值都是类型、字符串或整数;但是,指向该值的名称没有特定类型。这与许多语言(例如 C 和 Java)不同,其中名称表示内存中的固定大小、类型和位置。这意味着当我们在 Python 中初始化变量时,我们不需要声明类型。此外,变量,或者更具体地说是它们指向的对象,可以根据分配给它们的值更改类型,例如:

变量范围

了解函数内部变量的作用域规则很重要。每次执行函数时,都会创建一个新的本地命名空间。这表示一个本地环境,其中包含由函数分配的参数和变量的名称。为了在调用函数时解析命名空间,Python 解释器首先搜索本地命名空间(即函数本身),如果未找到匹配项,则搜索全局命名空间。这个全局命名空间是定义函数的模块。如果仍未找到该名称,它将搜索内置命名空间。最后,如果失败,则解释器会引发 NameError 异常。考虑以下代码:

在示例中,定义了两个全局变量。我们需要使用关键字 global 告诉解释器,在函数内部,我们指的是一个全局变量。当我们将此变量更改为 11 时,这些更改会反映在全局范围内。但是,我们设置为 21 的变量 b 是函数的局部变量,函数内部对其所做的任何更改都不会反映在全局范围内。当我们运行函数并打印 b 时,我们看到它保留了它的全局值。

到此这篇关于Python 中的命名空间、变量和范围的文章就介绍到这了,更多相关Python命名空间内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python 中的命名空间,你真的了解吗?

    写在之前 命名空间,又名 namesapce,是在很多的编程语言中都会出现的术语,估计很多人都知道这个词,但是让你真的来说这是个什么,估计就歇菜了,所以我觉得 "命名空间" 有必要了解一下. 全局变量 & 局部变量 全局变量和局部变量是我们理解命名空间的开始,我们先来看一段代码: x = 2 def func(): x = 3 print('func x ---> ',x) func() print('out of func x ---> ',x) 这段代码输出的结

  • Python进阶_关于命名空间与作用域(详解)

    写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空间 1.1 什么是命名空间 Namespace命名空间,也称名字空间,是从名字到对象的映射.Python中,大部分的命名空间都是由字典来实现的,但是本文的不会涉及命名空间的实现.命名空间的一大作用是避免名字冲突: def fun1(): i = 1 def fun2(): i = 2 同一个模块中的两个函数中,两个同名名字i之间绝没有任何

  • Python利用命名空间解析XML文档

    问题 你想解析某个XML文档,文档中使用了XML命名空间. 解决方案 考虑下面这个使用了命名空间的文档: <?xml version="1.0" encoding="utf-8"?> <top> <author>David Beazley</author> <content> <html xmlns="http://www.w3.org/1999/xhtml"> <he

  • 深入了解python全局变量,局部变量和命名空间

    目录 函数中的全局和局部变量 嵌套函数中的全局变量 非局部变量 Python 使用全局和局部变量的方式是特立独行的.虽然在许多或大多数其他编程语言中,如果未另行声明,变量将被视为全局变量,而 Python 则以相反的方式处理变量.如果没有另外声明,它们是本地的.这种方法背后的驱动原因是全局变量通常是不好的做法,应该避免.在大多数情况下,您想使用全局变量,最好使用参数将值放入函数或返回值以将其取出.与许多其他程序结构一样,Python 也通过设计强加了良好的编程习惯. 因此,当您在函数定义中定义变

  • python命名空间(namespace)简单介绍

    命名空间: 每一个作用域变量存储的位置,或者解释为 存储作用域中变量的字典. 作用: 获取想查看某个作用域中的变量名.变量值. 使用方法: locals() #当前命名空间 1. 效果图: 2. 代码 a=10 b=20 # 定义一个变量接收全局命名空间里的变量名.变量值 global_namespace=locals() print(global_namespace) print('\n\n\n') def one(): c=30 d=40 # 定义一个变量接收局部命名空间里的变量名.变量值

  • 解读Python编程中的命名空间与作用域

    变量是拥有匹配对象的名字(标识符).命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典. 一个Python表达式可以访问局部命名空间和全局命名空间里的变量.如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量. 每个函数都有自己的命名空间.类的方法的作用域规则和通常函数的一样. Python会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的. 因此,如果要给全局变量在一个函数里赋值,必须使用global语句. global VarName的

  • 详解Python 中的命名空间、变量和范围

    目录 Python 中的命名空间.变量和范围 什么是命名空间? 变量和表达式 变量范围 Python 中的命名空间.变量和范围 什么是命名空间? 首先,我们需要感知python中的名称(标识符)是什么.众所周知,在python中,一切都是对象.名称帮助我们访问底层对象.例如,当我们做作业时 a = 1 , 1 是存储在内存中的对象,a 是我们与之关联的名称.我们可以通过内置函数获取某个对象的地址(在 RAM 中), ID() .让我们看看如何使用它. a = 1 打印('id(1)=',id(1

  • 详解Python中__new__方法的作用

    目录 前言 一.__new__方法简介 1.初始化数据加载+解析类实例 2.初始化数据加载重写new方法+解析类实例 二.单例模式 1.用new方法如何实现单例模式 2.如何控制类仅执行一次初始化方法 三.多例模式 总结 前言 Python中类的构造方法__new__方法有何作用? Python类中有些方法名.属性名的前后都添加__双下画线,这种方法.属性通常属于Python的特殊方法和特殊属性.通过重写这些方法或直接调用这些方法来实现特殊功能.今天来聊聊构造方法__new__实际程序的应用场景

  • 详解 Python中LEGB和闭包及装饰器

    详解 Python中LEGB和闭包及装饰器 LEGB L>E>G?B L:local函数内部作用域 E:enclosing函数内部与内嵌函数之间 G:global全局作用域 B:build-in内置作用域 python 闭包 1.Closure:内部函数中对enclosing作用域变量的引用 2.函数实质与属性 函数是一个对象 函数执行完成后内部变量回收 函数属性 函数返回值 passline = 60 def func(val): if val >= passline: print (

  • 详解python中的 is 操作符

    大家可以与Java中的 == 操作符相互印证一下,加深一下对引用和对象的理解.原问题: Python为什么直接运行和在命令行运行同样语句但结果却不同,他们的缓存机制不同吗? 其实,高票答案已经说得很详细了.我只是再补充一点而已. is 操作符是Python语言的一个内建的操作符.它的作用在于比较两个变量是否指向了同一个对象. 与 == 的区别 class A(): def __init__(self, v): self.value = v def __eq__(self, t): return

  • 详解python中的线程

    Python中创建线程有两种方式:函数或者用类来创建线程对象. 函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程. 类:创建threading.Thread的子类来包装一个线程对象. 1.线程的创建 1.1 通过thread类直接创建 import threading import time def foo(n): time.sleep(n) print("foo func:",n) def bar(n): time.sleep(n) prin

  • 详解python中groupby函数通俗易懂

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[](指输出数据的结果属性名称).groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,可以有多个).mean()(对于数据的计算方式--函数名称) 举例如下: print(df["评分"].groupby([df["地区"],df["类

  • 详解Python中的路径问题

    1. 绝对路径引入 Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止.下面命令可以查看当前的搜索路径: import sys print(sys.path) sys.path的初始值来源于两个(其实还有一些更复杂但不常用的).一个是系统的PYTHONPATH变量,因此可通过设置该变量,来设置 Python 默认的搜索位置.比如: export PYTHONPATH=/opt/python:$PYTHONPATH echo $PYTHONPATH 将该命令放在系统初始

  • 详解python中的闭包

    闭包的概念 我们尝试从概念上去理解一下闭包. 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部函数引用了外部函数的变量,则可能产生闭包.闭包可以用来在一个函数与一组"私有"变量之间创建关联关系.在给定函数被多次调用过程中,这些私有变量能够保持持久性. 用比较容易懂得人话说,就是当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包.看下例子: def make_printer(msg): def printer(): print(msg) # 夹带私货(外部变量) r

  • 详解Python中import机制

    Python语言中import的使用很简单,直接使用import module_name语句导入即可.这里我主要写一下"import"的本质. Python官方定义: Python code in one module gains access to the code in another module by the process of importing it. 1.定义: 模块(module):用来从逻辑(实现一个功能)上组织Python代码(变量.函数.类),本质就是*.py文

  • 详解Python中string模块除去Str还剩下什么

    string模块可以追溯到早期版本的Python. 以前在本模块中实现的许多功能已经转移到str物品. 这个string模块保留了几个有用的常量和类来处理str物品. 字符串-文本常量和模板 目的:包含用于处理文本的常量和类. 功能 功能capwords()将字符串中的所有单词大写. 字符串capwords.py import string s = 'The quick brown fox jumped over the lazy dog.' print(s) print(string.capw

随机推荐