189 8069 5689

python函数命名空间 python名称空间

Python命名空间和全局变量问题,怎么解决

当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:

成都创新互联坚信:善待客户,将会成为终身客户。我们能坚持多年,是因为我们一直可值得信赖。我们从不忽悠初访客户,我们用心做好本职工作,不忘初心,方得始终。十年网站建设经验成都创新互联是成都老牌网站营销服务商,为您提供成都网站设计、网站建设、网站设计、H5页面制作、网站制作、品牌网站设计、微信平台小程序开发服务,给众多知名企业提供过好品质的建站服务。

1、局部命名空间:特指当前函数或类的方法。如果函数定义了一个局部变量 x,或一个参数 x,Python 将使用它,然后停止搜索。

2、全局命名空间:特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。

3、内置命名空间:对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。

4、如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,如,NameError: name 'aa' is not defined。

嵌套函数的情况:

1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜索

2、然后是在父函数的命名空间中搜索

3、接着是模块命名空间中搜索

4、最后在内置命名空间中搜索

Python中的命名空间是什么?

命名空间是从名称到对象的映射,大部分的命名空间都是通过Python字典来实现的。

命名空间提供了在项目中避免名字冲突的一种方法,各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。

Python命名空间分类

Python程序执行期间会有两个或者三个活动的命名空间,按照变量定义的位置,可以划分为以下3类:

内置名称:built-in names,Python语言内置的名称,比如函数abs、char和异常名称BaseException、Exception等。

全局名称:global names,模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。

局部名称:local names,函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。

Python命名空间生命周期

local names,在函数被调用时才被创建,但函数返回结果或抛出异常时被删除。

global names,在模块被加载时创建,通常一直保留,直到Python解释器退出。

built-in names,在Python解释器启动时创建,一直保留到解释器退出。

各个命名空间创建顺序:Python解释器启动—创建内建命名空间-加载模块-创建全局命名空间-函数被调用-创建局部命名空间。

各个命名空间销毁顺序:函数调用结束-销毁函数对应的局部命名空间-Python解释器退出-销毁全局命名空间-销毁内建命名空间。

python命名空间问题

createplot.ax1

是表示:

ax1

是函数

createplot

的一个属性,这个可以在函数里面定义也可以在函数定义后加入也可以

example:

def

fun():

fun.x

=1

当你在python的命令窗口下,运行一次fun()后,x

就是

fun()的一个属性,你在命令窗口下输入

fun.x

后面会显示

1

也可以

函数定义完后加入

属性

fun.y

=

2,在使用

dir(fun),你就会发现fun有

x,y

这两个属性

Python语言中命名空间的使用?

如果一个命名声明为全局的,那么对它的所有引用和赋值会直接搜索包含这个模块全局命名的作用域。如果要重新绑定最里层作用域之外的变量,可以使用 nonlocal 语句;如果不声明为 nonlocal,这些变量将是只读的(对这样的变量赋值会在最里面的作用域创建一个新的局部变量,外部具有相同命名的那个变量不会改变)。

通常,局部作用域引用当前函数的命名。在函数之外,局部作用域与全局使用域引用同一命名空间:模块命名空间。类定义也是局部作用域中的另一个命名空间。

重要的是作用域决定于源程序的意义:一个定义于某模块中的函数的全局作用域是该模块的命名空间,而不是该函数的别名被定义或调用的位置,了解这一点非常重要。另一方面,命名的实际搜索过程是动态的,在运行时确定的——然而,Python 语言也在不断发展,以后有可能会成为静态的“编译”时确定,所以不要依赖动态解析!(事实上,局部变量已经是静态确定了。)

Python 的一个特别之处在于:如果没有使用 global 语法,其赋值操作总是在最里层的作用域。赋值不会复制数据,只是将命名绑定到对象。删除也是如此:del x 只是从局部作用域的命名空间中删除命名 x 。事实上,所有引入新命名的操作都作用于局部作用域。特别是 import 语句和函数定义将模块名或函数绑定于局部作用域(可以使用 global 语句将变量引入到全局作用域)。

global 语句用以指明某个特定的变量为全局作用域,并重新绑定它。nonlocal 语句用以指明某个特定的变量为封闭作用域,并重新绑定它。


分享名称:python函数命名空间 python名称空间
URL分享:http://cdxtjz.cn/article/dojhcdj.html

其他资讯