PYTHON3 命名空间/作用域 技术教程文章

Python命名空间详解

通俗的来说,Python中所谓的命名空间可以理解为一个容器。在这个容器中可以装许多标识符。不同容器中的同名的标识符是不会相互冲突的。理解python的命名空间需要掌握三条规则: 第一,赋值(包括显式赋值和隐式赋值)产生标识符,赋值的地点决定标识符所处的命名空间。 第二,函数定义(包括def和lambda)产生新的命名空间。 第三,python搜索一个标识符的顺序是"LEGB"。 所谓的"LEGB"是python中四层命名空间的英文名字首字母的缩写...

Python新手在作用域方面经常容易碰到的问题

通常,当我们定义了一个全局变量(好吧,我这样说是因为讲解的需要——全局变量是不好的),我们用一个函数访问它们是能被Python理解的:bar = 42 def foo():print bar 在这里,我们在foo函数里使用了全局变量bar,然后它也如预想的能够正常运行:>>> foo() 42 这样做很酷。通常,我们在使用了这个特性之后就想在所有的代码里用上它。如果像以下的例子中使用的话还是能够正常运行的:bar = [42] def foo():bar.append(0) foo()>>> ...

讲解Python中for循环下的索引变量的作用域

我们从一个测试开始。下面这个函数的功能是什么?def foo(lst):a = 0for i in lst:a += ib = 1for t in lst:b *= ireturn a, b 如果你觉得它的功能是“计算lst中所有元素的和与积”,不要沮丧。通常很难发现这里的错误。如果在大堆真实的代码中发现了这个错误就非常厉害了。——当你不知道这是一个测试时,很难发现这个错误。 这里的错误是在第二个循环体中使用了i而不是t。等下,这到底是怎么工作的?i在第一个循环外应该是不可见...

Python本地与全局命名空间用法实例

本文实例讲述了Python本地与全局命名空间用法。分享给大家供大家参考。具体如下:x = 1 def fun(a):b=3x=4def sub(c):d=bglobal xx = 7print ("Nested Function\n=================")print locals()sub(5)print ("\nFunction\n=================")print locals()print locals()["x"]print globals()["x"] print ("\nGlobals\n=================") print globals() fun(2)///scope.py Globals ================= {x: 1,__file__: C:...

深入理解Python中命名空间的查找规则LEGB

名字空间 Python 的名字空间是 Python 一个非常核心的内容。 其他语言中如 C 中,变量名是内存地址的别名,而在 Python 中,名字是一个字符串对象,它与他指向的对象构成一个{name:object}关联。 Python 由很多名字空间,而 LEGB 则是名字空间的一种查找规则。 作用域 Python 中name-object的关联存储在不同的作用域中,各个不同的作用域是相互独立的。而我们就在不同的作用域中搜索name-object。 举个栗子,来说明作用域是相互独立...

Python作用域用法实例详解

本文实例分析了Python作用域用法。分享给大家供大家参考,具体如下: 每一个编程语言都有变量的作用域的概念,Python也不例外,以下是Python作用域的代码演示:def scope_test():def do_local():spam = "local spam"def do_nonlocal():nonlocal spamspam = "nonlocal spam"def do_global():global spamspam = "global spam"spam = "test spam"do_local()print("After local assignment:", spam)do_nonlocal()print("After nonlocal...

深入解析Python中函数的参数与作用域

传递参数 函数传递参数时的一些简要的关键点: 参数的传递是通过自动将对象赋值给本地变量名来实现的。所有的参数实际上都是通过指针进行传递的,作为参数被传递的对象从来不自动拷贝。在函数内部的参数名的赋值不会影响调用者。改变函数的可变对象参数的值会对调用者有影响。实际上,Python的参数传递模型和C语言的相当相似: 不可变参数”通过值”进行传递。像整数和字符串这样的对象是通过对象引用而不是拷贝进行的,但是因为不论...

详解Python函数作用域的LEGB顺序

本文为大家介绍了Python函数作用域的查找顺序,供大家参考,具体内容如下1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域2.LEGB是作什么用的?为什么非要介绍这个呢?或者说它们的作用是什么? 原因是因为我们的在学习Python函数的时候,经常会遇到很多定义域的问题,全部变量,内部变量,内部嵌入的函数,等等,Python是如何查找的呢?以及Python又是按照什么...

解析Python中的变量、引用、拷贝和作用域的问题【图】

在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样。在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可。但是,当用变量的时候,必须要给这个变量赋值;如果只写一个变量,而没有赋值,那么Python认为这个变量没有定义。如下:>>> a Traceback (most recent call last):File "", line 1, in NameError: name a is not defined下面我们具体讲一下Python中的变量,引用,拷贝和作用域问题。。一、可变...

优化Python代码使其加快作用域内的查找

我将示范微优化(micro optimization)如何提升python代码5%的执行速度。5%!同时也会触怒任何维护你代码的人。 但实际上,这篇文章只是解释一下你偶尔会在标准库或者其他人的代码中碰到的代码。我们先看一个标准库的例子,collections.OrderedDict类:def __setitem__(self, key, value, dict_setitem=dict.__setitem__):if key not in self:root = self.__rootlast = root[0]last[1] = root[0] = self.__map[key] = [last, root,...

Python中的作用域规则详解

Python是静态作用域语言,尽管它自身是一个动态语言。也就是说,在Python中变量的作用域是由它在源代码中的位置决定的,这与C有些相似,但是Python与C在作用域方面的差异还是非常明显的。 接下来会谈论Python的作用域规则,在这中间也会说明一下Python与C在作用域方面的不同。 在Python 2.0及之前的版本中,Python只支持3种作用域,即局部作用域,全局作用域,内置作用域;在Python 2.2中,Python正式引入了一种新的作用域 --- 嵌套...

深入探究Python中变量的拷贝和作用域问题【图】

在 python 中赋值语句总是建立对象的引用值,而不是复制对象。因此,python 变量更像是指针,而不是数据存储区域,这点和大多数 OO 语言类似吧,比如 C++、java 等 ~ 1、先来看个问题吧: 在Python中,令values=[0,1,2];values[1]=values,为何结果是[0,[...],2]?>>> values = [0, 1, 2] >>> values[1] = values >>> values [0, [...], 2] 我预想应当是[0, [0, 1, 2], 2]但结果却为何要赋值无限次? 可以说 Python 没有赋值,只有引...

解读Python编程中的命名空间与作用域【图】

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

Python3命名空间和作用域【代码】

#!usr/bin/python #coding=UTF-8 ''' Python3命名空间和作用域 '''''' 命名空间(Namespace):从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。三种命名空间:1、内置名称(built-in names)Python 语言内置的名称,比如函数名 abs、char 和异...

python入门教程07-03 (python语法入门之名称空间与作用域)【代码】

很多的同学看了本章标题之后就会有很多的疑问,名称和作用域到底有什么关系,平时不都是随便编辑名称么,下面我们来学习一下吧~~~一 名称空间名称空间即存放名字与对象映射/绑定关系的地方。对于x=3,Python会申请内存空间存放对象3,然后将名字x与3的绑定关系存放于名称空间中,del x表示清除该绑定关系。在程序执行期间最多会存在三种名称空间1.1 内建名称空间伴随python解释器的启动/关闭而产生/回收,因而是第一个被加载的名称...

什么是Python的命名空间?

什么是Python的命名空间? 在Python中,所有的名字都存在于一个空间中,它们在该空间中存在和被操作——这就是命名空间。它就好像一个盒子,每一个变量名字都对应装着一个对象。当查询变量的时候,会从该盒子里面寻找相应的对象。

Python3中变量作用域的总结【图】

最近,在工作中踩到了一个关于Python3中nonlocal语句指定的变量作用域的坑。今天趁周六休息总结记录一下。众所周知,Python中最常见的作用域定义如下:                但是,Python3为了更加方便地在闭包函数中定义、引用变量,新引入了nonlocal语句,其代表的含义为“非local、非global也非built-in,典型使用场景多见于闭包函数中内层函数需要引用外层函数定义的变量”;其查找顺序为“local--nonlocal--global-...

Python学习系列之变量的作用域(二十)【图】

变量的作用域 变量的作用域程序代码能访问该变量的区域 根据变量的有效范围可分为1. 局部变量在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会成为全局变量2. 全局变量函数体外定义的变量,可作用于函数内外 代码举例 1. 局部变量变量的作用域 def fun(a,b):c=a+b #c成为局部变量,因为c是在函数体内进行定义的变量,a,b为函数的形参,作用范围也是函数内部,相当于局部变量print(c)#以下...

Python 之 函数标识符的作用域(或变量的作用域) 的深入浅出【代码】【图】

Python 之 函数标识符的作用域(或变量的作用域) 的深入浅出 1、函数作用域概念2、作用域分类2.1 全局作用域2.2 局部作用域2.3 总结 3、嵌套函数3.2 嵌套函数的概念3.2 嵌套函数的作用域 4、global 语句4.1 一个变量赋值语句引发的问题4.2 解决上述问题4.3 x+=1 问题总结4.4 global 使用原则 5、闭包 及 nonlocal 语句5.1 自由变量5.2 nonlocal 语句5.3 nonlocal 注意事项 6、函数参数默认值的作用域6.1 引用类型缺省值6.1.1 示例...

18.python名词空间与作用域【代码】【图】

名称空间(namespaces)顾名思义即存放名字与对象映射/绑定关系的地方,是对栈区的划分,在不同的空间中可以存放相同的名字,从而解决命名冲突的问题作用域指的是名称所对应的有效范围,内置名称空间和全局名称空间在代码全局都能被使用,被称为全局作用域,而局部名称空间在函数内定义,就只能在当前函数使用,就被称为局部作用域名称空间(namespaces) 名称空间分为三种 内置名称空间 存放的名字:python解释器内置的名字 存活周期:...