- 命名空间:从命名到对象的映射
1. 例子:
内置命名集:包括像abs()这样的函数
模块中的全局命名
函数调用中的局部命名
2. 某种意义上,对象的属性名也算一种命名空间
3. 不同命名空间之间的命名之间没有联系。例如两个模块同时定义了一个名为A的函数,这样不会发生混淆,不过要以模块名为前缀来引用他们
4. 当函数被调用时创建一个局部命名空间
- 作用域
- python程序中一个命名空间可以访问的文法区域,直接访问是指在引用命名时不用加前缀
- 只有模块、函数、类可以引入作用域,其他代码块不会引入作用域(比如while,if等),这和C、C++、Java很不一样
- 在python中,使用一个变量不需要先声明它,但是在使用时,它必须已经绑定到一个某个对象中,而变量的绑定将在当前作用域中引入新的命名,同时屏蔽外层作用域中的同名命名
看以下代码例子: i = 1 def fun(): i = 9 print i fun() print i
- 这段代码运行的结果是:
1
9 - 我们看到,fun中定义了局部变量 i,并且将全局变量 i 屏蔽了
在Python中,名字绑定在所属作用域中引入新的变量,同时绑定到一个对象。名字绑定发生在以下几种情况之下:
1.参数声明:参数声明在函数的局部作用域中引入新的变量;
2.赋值操作:对一个变量进行初次赋值会在当前作用域中引入新的变量,后续赋值操作则会重新绑定该变量;
3.类和函数定义:类和函数定义将类名和函数名作为变量引入当前作用域,类体和函数体将形成另外一个作用域;
4.import语句:import语句在当前作用域中引入新的变量,一般是在全局作用域;
5.for语句:for语句在当前作用域中引入新的变量(循环变量);
6.except语句:except语句在当前作用域中引入新的变量(异常对象)。
在Python中,类定义所引入的作用域对于成员函数是不可见的,这与C++或者Java是很不同的,因此在Python中,成员函数想要引用类体定义的变量,必须通过self或者类名来引用它。