离毕业工作还有几个月,本来想早点去公司实习,无奈gb学校不给放。好吧,既然这样,就学门语言。
参考与 http://www.cnblogs.com/vamei ,我是跟着这位博客牛人的博客教程学的,具体的大家可以到这位博主的博客查看。
记得比较零碎,就将练习的小例子的代码以及注释粘了过来,主要是为了防止自己忘记,大家凑活着看吧。
#coding:utf-8fromloggingimportexceptionfromxmlrpclibimportDateTime#定义类classInfo():
age=2classPerson():#括号内的参数代表继承与那个对象,不代表构造方法形参name='hefei'age=25defsayHello(self,content):#成员函数需要包括self参数PRintcontentdef__init__(self,Info):#相当于构造方法,用来在对象创建时,初始化一些属性self.age=Info.age#类的继承,新建类时括号内写被继承的父类classAmerican(Person):
shengao=1.88i=Info()
a=Person(i)#map的赋值,python里面成为字典,无非键值对嘛,就是个mapm={'name':'hefei','age':25}
m.setdefault('shenggao')
m['shenggao']=1.88foriinm.values():printi#文件流f=open('test.txt','r')
content=f.readline()
f.close()printcontent#循环语句之几个好用的方法S ='abcdefghijk'foriinrange(0,len(S),2):#最后一个参数代表跳几格printS[i]
S='abcdefghijk'for(index,char)inenumerate(S):#在对list或tuple进行迭代时,枚举方法可以获得列表的索引,indexprintindexprintchar#zip,打包,对于相同长度的列表们可以进行打包,以下例为例,打包后的结果为:[(1,'a'),(2,'b'),(3,'c')]ta=[1,2,3]
tb=['a','b','c']
zipped=zip(ta,tb)printtype(zipped),zipped#unzipta1,tb1=zip(*zipped)#*代表解包裹的意思,解包裹就是按照","拆分printta1,tb1,type(ta1)#再次打包,又变回去了,不过类型变了,呵呵,设计的真好result=zip(ta1,tb1)printresult#循环对象,相当于迭代器,一些方法的返回值就可能是一个循环对象,for循环时,就是调用循环对象的next()方法f=open('test.txt')#这里的文件对象就是一个循环对象forlineinf:printline#生成器:自定义迭代对象,每次迭代时,遇到yield返回,下一次迭代时,从上一次yield的地方开始迭代defgen():
a=1yielda
a=a+1yieldaforiingen():printi#表推导,和自定义迭代器一样,有简短的表达式形式,表推导用来快速生成所需的列表,感觉没有多大用途。L =[]forxinrange(10):
L.append(x**2)printL
xl= [1,3,5]
yl= [9,12,13]
L= [ x**2for(x,y)inzip(xl,yl)ify > 10]printL#lambda函数,在面向对象的世界里,函数也是对象func=lambdax,y:x+yprintfunc(1,2)#lambda 表达式等价于常规的方法定义deffunc(x,y):returnx+yprintfunc(2,3)#几个特殊的方法#map 函数:返回一个列表,结果为本来列表经方法处理后的列表,返回结果为[3,5]printmap(lambdax:x+1, [2,4])#reduce方法,迭代的思想,将前一个方法处理后的结果作为后一个处理的参数,返回结果为6printreduce(lambdax,y:x+y, [1,2,3])#异常处理re=iter(range(5));#使用iter方法定义一个迭代对象try:foriteminrange(10):#迭代10次printre.next()exceptStopIteration:print'here is the end',itemfinally:print'this is finaly'#自行抛出一个异常对象,raise关键字raiseStopIteration#动态类型,引用独立 下例中,a+2了,虽然b的引用指向a 但,b的值不变#python中对象分为可变和不可变对象,像元组(tuple)和字符串都是不可变对象,其他的是可变对象,这点和java相同a = 5b=a
a= a + 2print'a=',a,'b=',b#标准库中的api介绍printDateTime()#python深入学习内容#上下文管理器:定义了文件对象的作用范围,在with 语句之内,虽然f没有手动关闭,但是只要在with语句块之外,对象就自动关闭,其实就是分别执行类内置函数,__enter__和__exit__方法with open('test.txt','w') as f:printf.closedprintf.closed#可以自定义上下文管理器classTeller(object):def__enter__(self):print'i m come'def__exit__(self,fexc_type,exc_value,traceback):#这里尼玛不给提示,这里的__exit__方法需要4个参数是必须的print'i m out'with Teller() as teller:#with 语句块内一定要有语句,不然解释不通过print'running..'#函数对象,就相当于java中的内部对象defout_fun():defin_fun():return2printin_fun()
out_fun()#闭包,以下程序运行结果为25,my——line= line_conf()返回一个函数对象,传入5,进行2*5+b的运算,使用的b为外部函数所定义的b的值#这里的b也称为内部函数对象的环境变量,一个函数对象和他的环境变量集合在一起就叫做闭包,环境变量的取值被放在函数对象的_closure_属性中,该属性是一个元组#闭包的优势在于减少了函数参数的设定,在"并行运算中有很大的应用"(不是很懂)defline_conf():
b= 15defline(x):return2*x+breturnline#return a function objectb= 5my_line=line_conf()print(my_line(5))printmy_line.__closure__[0].cell_contents#装饰器,就相当于java中的动态代理,修饰原有的方法,让原有的方法得到加强#定义一个装饰器,装饰器是修饰函数的,故接收的参数也是函数对象,除此之外,装饰器还可以修饰类,代码如下defdecorator(F):defnew_F():print"这是加强内容"returnF()#这里一定要用F(),不能用F,否则出不了结果,这里体现了闭包的特性,内部函数调用了外部的环境变量returnnew_F#返回加工后的函数对象@decoratordefF():print"原来有的内容"F()#装饰器还可以修饰类defdecorator1(aClass):classnewClass:def__init__(self, age):
self.total_display=0
self.wrapped=aClass(age)defdisplay(self):
self.total_display+= 1print("total display", self.total_display)
self.wrapped.display()returnnewClass
@decorator1classBird:def__init__(self, age):
self.age=agedefdisplay(self):print("My age is",self.age)
eagleLord= Bird(5)foriinrange(3):
eagleLord.display()#使用的一些小技巧#但写有测试语句的模块被别的模块引入的时候,要想在别的模块中不运行这些测试语句,在别的模块中可以这么写,if __name__=='__main__':测试代码deflocalMethod():print"hello"if__name__=='__main__':print'test content'
未完待续。。