【备注:本文是学习http://blog.csdn.net/ithomer/article/details/8907268过程中记下的笔记】
【EX:所注为代码示例】
【Tips:所注为标识,可能是一个小技巧】
一、进阶08 异常处理
类似于C++中的异常处理一样
具体过程如下:
try -> func() ->except somecase: -> except -> else -> finally
在可能会出现异常的函数体外用try块包裹,在函数执行过程中如果遇到异常,函数停止,与下面except 后面所带的异常类型进行匹配,如果匹配,则执行该except后面的语句(如果except后面没有参数,表示所有的一场都交给他处理,应该算是默认项)
如果异常与这些except 后面的参数都没匹配上,且没有无参的except,那么就往上一层,返回调用该函数的部分直到被捕捉或造成主程序报错;
如果没有异常就执行else部分,最后的finally是程序无论是否异常都会执行的
总结一下他的过程就是:
try -> 异常 -> except -> finally
try -> 无异常 -> else -> finally
EX:
>>> def func():
try:
m = 1/0
except TypeError:
print"TypeError"
except:
print "Any Errorint Func()"
else:
print m
finally:
print"The End"
>>> func()
Any Errorint Func()
The End
上面程序,出现的异常是:除数为零,但是没有合适异常参数与其匹配,那么就交给默认项except处理,完了后执行finally语句
用raise自己抛出异常,类似于throw
EX:
>>> def func():
try:
print 'aaaa'
raise StopIteration
except StopIteration:
print "StopIteration except"
except:
print "Any Except"
else:
print "succeed Run"
finally:
print 'The End'
>>> func()
aaaa
StopIteration except
The End
EX:
>>> def func():
try:
print 'aaaa'
raise
except StopIteration:
print "StopIteration except"
except:
print "Any Except"
else:
print "succeed Run"
finally:
print 'The End'
>>> func()
aaaa
Any Except
The End
二、进阶09 动态类型
1.前面的学习中我们了解到python中不用提前定义对象 而是直接进行赋值 EX: a = 9 吧= ‘abcd’
其实,每一个类型都是一个对象,上面的9,‘abcd’是两个对象,具有不同的类型
然后将这两个对象赋值给他们的引用,叫做对象的引用,但不同于C++中的引用,python中的引用不是与对象绑定的,你可以再将它引用至别的对象,所以,他的名字叫引用,但实质上是与指针一个作用
对象产生于你创建它的时候,销毁于无引用指向该对象时,对象占有一定的内存
EX:a = 3 #创建对象3,并用引用a指向他
a = 'xx' #创建对象‘xx’,同时改变a的指向,让它指向对象'xx',这时对象3被销毁
EX:
>>> b= 3
>>> a =b
>>> a = a**2
>>> b
3
>>> a
9
这个例子我们发现,虽然刚开始两个引用都指向同一个对象,但后来新产生了一个对象a**2,这时a指向新的对象,b的值没变
EX:
>>> l1= [1,2,3,4]
>>> l2 = l1
>>> l2[0] = 10 #这里对l2所引用的对象元素进行赋值,没有修改引用,而我们之前的操作都是对引用本身进行操作
>>> l2
[10, 2, 3, 4]
>>> l1
[10, 2, 3, 4]
这样我们可以对比出一个结论:通过引用可以对所引用对象值进行修改的变量叫做可变对象,如字典,序列;不能修改的变量会死不可变对象,如数字,字符串等
2.值传递与引用传递
类似于C语言中的理解
值传递就是函数参数是一个副本,不改变原函数对象值,这种情况发生于参数是不可变类型
引用传递就是改变调用函数原对象值,发生于参数是可变类型
EX:
>>> def func(a,l):
a = a*2
l[0] = l[0]+l[1]
>>> l = [1,2,3,4] #l是可变类型
>>> a = 2 #a是不可变类型,调用func会产生另一个对象,对象值为2
>>> func(a,l)
>>> a
2 #a没有改变
>>> l #l被改变
[3, 2, 3, 4]
Tips:Python的逻辑运算符:and or not