Python学习总结( 三 )

作用域 1 # coding=utf-8 23 # 只有函数执行才会开启一个作用域 。4 if(2 > 1): 5x = 1 67 print(x) # 会输出1 。89 10 # 使用vars()函数可以访问当前作用域包含的变量 。 11 x = 112 print(vars()["x"])13 14 # 使用globals()函数可以访问全局作用域 。 15 x = 116 17 def func():18print(globals()["x"])19 20 func()21 22 # 使用locals()函数可以访问局部作用域 。 23 def func():24x = 225print(locals()["x"])26 27 func()28 29 # 每个函数定义时都会记住所在的作用域 。 30 # 函数执行的时候会开启一个新的作用域 , 函数内变量访问的规则是:先访问当前作用域 , 如果没有就访问函数定义时的作用域 , 递归直到全局作用域 。 31 x = 132 33 def func():34y = 235print(x, y) # 输出1 236 37 func()38 39 40 # 变量赋值始终访问的是当前作用域 。 41 x = 142 43 def func():44x = 245y = 246print(x, y) # 输出2 247 48 func()49 print(x) #输出 150 51 # 局部变量会覆盖隐藏全局变量 , 想访问全局变量可以采用global关键字或globals()函数 。 52 x = 153 54 def func():55global x56x = 257y = 258print(x, y) # 输出2 259 60 func()61 print(x) #输出 2 1 # python支持闭包 2 def func(x): 3def inner_func(y): 4print(x + y) 56return inner_func 78 inner_func = func(10) 9 inner_func(1)10 inner_func(2)1 #函数作为对象2 def func(fn, arg):3fn(arg)4 5 func(print, "hello")6 func(lambda arg : print(arg), "hello")模块几个模块相关的规则:

  • 一个文件代表一个模块 。
  • 可以用import module导入模块 , 也可以用form module import member导入模块的成员 。
  • 如果导入的是module , 必须使用module.member进行访问;如果导入的member , 可以直接访问member 。
  • 导入的module或member都会变成当前module的member 。
b.py
1 # coding=utf-82 3 print __name__4 5 def say_b():6print "b"a.py
1 # coding=utf-82 3 import b4 from b import *5 6 print __name__7 8 def say_a():9print "a"test.py
1 # coding=utf-82 3 import a4 5 print __name__6 7 a.say_a();8 a.say_b();9 a.b.say_b()输出
1 b2 a3 __main__4 a5 b6 b异常管理 1 # coding=utf-8 23 # 自定义异常 4 class HappyException(Exception): 5pass 67 # 引发和捕获异常 8 try: 9raise HappyException10 except:11print("HappyException")12 13 try:14raise HappyException()15 except:16print("HappyException")17 18 # 捕获多种异常19 try:20raise HappyException21 except (HappyException, TypeError):22print("HappyException")23 24 # 重新引发异常25 try:26try:27raise HappyException28except (HappyException, TypeError):29raise30 except:31print("HappyException")32 33 #访问异常实例34 try:35raise HappyException("都是我的错")36 except (HappyException, TypeError), e:37print(e)38 39 #按类型捕获40 try:41raise HappyException42 except HappyException:43print("HappyException")44 except TypeError:45print("TypeError")46 47 #全面捕获48 try:49raise HappyException50 except:51print("HappyException")52 53 #没有异常的else54 try:55pass56 except:57print("HappyException")58 else:59print("没有异常")60 61 #总会执行的final62 try:63pass64 except:65print("HappyException")66 else:67print("没有异常")68 finally:69print("总会执行")面向对象先上一张图


推荐阅读