现在的位置: 首页 > 综合 > 正文

Python学习笔记[2]

2018年02月09日 ⁄ 综合 ⁄ 共 1958字 ⁄ 字号 评论关闭

备注:本文是学习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

 

抱歉!评论已关闭.