Python 编程快速上手(2)

7.  作用域。  这里主要给出一个基本的理解。 如上所述,

a.  一个 Python 文件就是一个模块,该模块的变量的作用域主要可分为全局作用域,本地作用域以及内置作用域。

b.  代码块(例如, try块,if-else, for , while 等),函数中定义的变量,方法,类等属于本地作用域, 可以通过 locals() 查询,作用范围在创建时到代码块或函数退出为止; 函数之外的变量,方法,类等属于全局作用域,作用范围从创建时到整个文件末尾为止,可以通过 globals() 查询。

c.  当全局作用域的变量与本地作用域的变量冲突时,会优先采用本地作用域中的变量,查找不到时再到全局作用域中查找。要使用全局作用域的变量,必须先声明 global var.  声明global var 之前不能出现同名变量 var.  请看:

x = 2

def fun1() : 

x = 3

print  "[1] x = " , x    // 使用局部变量x  打印 [1]  x = 3 

print "init: x = " , x        // 使用全局变量x   打印 init x = 2  

fun1()

print "after [1] x = ", x   // 不会改变全局变量x  打印 after [1] x = 2 

def fun2() : 

global  x     // 声明使用全局变量 x 

x = 3

fun2()

print "after fun2 : x = ",  x     // 打印  after fun2: x = 3

def fun3() :

x = 0

#ERROR    global x    : 语法错误: x 不能既是全局变量又是局部变量。也就是说,      

print "[3] x = ", x            : 要使用全局变量,不可以出现在同名的局部变量之后。

fun3()

内置作用域是python 语言所定义的系统变量,方法,类等的作用域, 可以直接使用。  例如, type 函数可以打印对象的类型。 

print type(x)      // 打印  <type 'int'>

def type(x) :

print "my type(): "

return x*2

print type(x)     // 打印 6

因此,可以得到又一条结论: 如果定义了与内置方法同名的方法, 会优先采用自定义的方法。 事实上, 作用域的优先级:

本地作用域  》  全局作用域 》 内置作用域  

8.  异常机制。 try-except , try-except-else,  try-finally,  try-except-finally 四种。 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e2243772a70a5634f8dfa825cfd8e3d1.html