Python内部培训

上传人:hy****d 文档编号:242879672 上传时间:2024-09-10 格式:PPTX 页数:45 大小:237.68KB
返回 下载 相关 举报
Python内部培训_第1页
第1页 / 共45页
Python内部培训_第2页
第2页 / 共45页
Python内部培训_第3页
第3页 / 共45页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2011-1-11,#,Python,内部培训,1,Python,面世,1989,年,Guido,van,Rossum,在阿姆斯特丹完成,Guido,为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为,ABC,语言的一种继承,第一,个,Python,实现是运行在,Mac,机,使用,Python,作为语言的名字,因为是英国幽默剧团,:Monty Python,飞行马戏团,的,fans,ABC,是由,Guido,参加设计的一种教学语言非常优美和强大,是专门为非专业程序员设计,的,目前在,Google,,主要从事,GAE/Python3.x,方面的研究,2,江湖地位,(TIOBE,Dec,2010),3,Python,的应用,领域,桌面,GUI,软件开发,(wxPython,PyQT),网络,应用,开发,(,内置模块,Twistd,Stackless),2/3D,图形处理,游戏,开发,(PIL,pyGame),文档处理,科学计算,(moinmoin,numpy),Web,应用开发,(Django,ZOPE,web.py,Quixote),移动设备应用开发,(PyS60,PySide),数据库开发,(,支持,SQL,和,NOSQL,ZODB),嵌入其它,应用,(,嵌入,C/C+,delphi,调用,DLL),4,Python,电影情节,工业光魔:,电影特技:,侏罗纪公园,、,变形金刚,、,哈利波特,、,阿凡达,、,星球大战,等,工作站:,Linux,、,IRIX,、,OS X,、,Windows,、,Tru64,、,Solaris,等,Python 1.4(1996,年,),,,1.5,,,2.1,混合使用,主要用来控制和调度各个渲染的机器,(maya),了解更多:,5,适合学习对象,软件开发人员,软件测试人员,软件配置,/,部署,/,自动化开发人员,网站运维人员,高级动画设计人员,系统原型架构设计人员,6,除了,OS,和驱动程序,Python,还有什么不能干的!,7,内部实现方式,C - CPython,我们现在使用的,/,官方发行的,JAVA - Jython,java,项目中会使用,.,NET -,I,ronPython,Python - pypy,Parrot,8,蟒之,禅,(Python,哲学,),优美胜过丑陋,明确,胜过含蓄,简单,胜过复杂,复杂,胜过难懂,扁平,胜过嵌套,稀疏,胜过密集,9,开发环境,IDLE ,安装包自带,交互模式,UliPad ,limodou,基于,wxPython,写的,推荐!,Eclipse+pydev ,收费的,Eric4 ,基于,PyQT4,,功能,强大,BOA,类似于,delphi,的,IDE(wxPython),WingIDE ,共享软件,VIM,、,Emacs ,主要在,linux,下使用,Bpython linux,的带提示的交互环境,其它编辑器,UE,,,notepad+,,,editplus,10,语法特色,动态语言特性,可在运行时改变对象本身,(,属性和方法等,),基于,C/C+,和,JAVA,,但有很大区别,缩进方式,建议使用空格,不要用,TAB,多个语句在一行使用,;,分隔,注释,符是,#,,多行使用,docstring(),变量无需类型定义,可进行函数式编程,FP,Python3.x,的变迁,11,本讲义约定使用,Python 2.x,版本,3.x,版本由于库没有跟上,暂时不推荐使用,12,Hello world (1),表达式,2 + 3,3 + (7 * 4),3 * 5,Hello + World,变量赋值,a = 4 3,b = a * 4.5,c = (a+b)/2.5,a = “Hello World”,x,y = 4+2,”python”,pass,语句,不做任何事时使用,if a = a and b lst = 1, 2, abc, 4, 5,.join(lst)1,2,abc,4,5,16,强大的,string,处理案例,我原先的一个项目中,要根据业务逻辑来封装字符串操作,简化调用。,开始的时候使用的是,C+,写的字符串操作,整个类下来需要,1500,行代码。,改用,Python,之后,用了不到,100,行就实现了,C+,版本的所有功能并有所增强。,17,列表,list,赋值,a = 2, 3, 4,# A list of integer,b = 2, 7, 3.5, “Hello”,# A mixed list,c = ,# An empty list,d = 2, a, b,#,嵌套列表,e = a + b,# Join two lists,操作,x = a1,# Get 2nd element (0 is first),y = b1:3,# Return a sub-list,z = d102,# Nested lists,b0 = 42,# Change an element,print sum(a),# = 9,x = a.pop(0),# pop,第一个数据,18,tuple,赋值,f = (2,3,4,5),# A tuple of integers,g = (,),# An empty tuple,h = (2, 3,4, (10,11,12),# A tuple containing mixed objects,操作,x = f1,# Element access. x = 3,y = f1:3,# Slices. y = (3,4),z = h11,# Nesting. z = 4,特色,与,list,类似,最大的不同,tuple,是一种只读且不可变更的数据结构,不可取代,tuple,中的任意一个元素,因为它是只读不可变更的,也不能进行像,list,一样的加法操作,19,字典,d,ict,赋值,a = ,# An empty dictionary,b = x: 3, y: 4 ,#,有点类似,json,格式,c = uid: 105,login: beazley,name : David Beazley,操作,u = cuid,# Get an element,cshell = /bin/sh,# Set an element,dict2 = dict2.update(dict1),#,使用,dict1,中的数据去更新,dict2,if c.has_key(directory):,# Check for presence of an member,d = cdirectory,else:,d = None,d = c.get(“directory”,None,),#,带默认值的方式,20,集合,set,set(,“hello”, “world”, “of”, “words”, “of”, “world,”,),set(world, hello, words, of,),如何删除重复数据,Ls1,= 1,3,5,3,7,4,5,Ls2,=,list(set(Ls1,),可以使用,&,、,|,求两个,set,的交集、并,集、补集、全集,s1,= set(1,2,3)s2 = set(2,4),s1,&,s2#2,s1,|,s2#1,2,3,4,s1 - s2#1,3,s1 s2#1,3,4,21,循环,While,语句,while a b:,a = a + 1,break,For,语句,(,遍历,序列的元素,),for item in 3, 4, 10, 25:,print item,# Print characters one at a time,for c in Hello World:,print c,# Loop over a range of numbers,for i in,x,range(0,100,2):,p,rint i,for i in xrange(len(list1):,print list1i,22,死循环怎么办?,桌面应用可以马上知道,并杀死对应进程,服务器应用怎么去监控?,计数器:在循环的最里面计数,超过指定数值就退出,缺点太多了,让函数带有超时功能,23,函数,d,ef,语句,def func1(a,b):,#,没有指针,函数内的数据只能通过返回,q = a/b,r = a - q*b,return r,#,调用方式,a = func1(42,5),# a = 2,返回多个值,def func2(a,b):,q = a/b,r = a - q*b,return q,r,x,y = func2(42,5),# x = 8, y = 2,24,类,class,c,lass,语句,class Account:,def _init_(self, initial):,self.balance = initial,def deposit(self, amt):,self.balance = self.balance + amt,def withdraw(self,amt):,self.balance = self.balance amt,def getBalance(self):,return self.balance,使用定义好的,class,a = Account(1000.0),a.deposit(550.23),a.deposit(100),a.withdraw(50),print a.getBalance(),25,异常处理,t,ry,语句,try:,f = open(“foo“,”r”),except IOError:,print Couldnt open foo. Sorry.“,r,aise,语句,def factorial(n):,if n 0:,raise ValueError,Expected non-negative number,if (n factorial(-1),Traceback (innermost last):,File , line 1, in ?,File , line 3, in factorial,ValueError: Expected non-negative number,26,文件操作,open(),函数,f = open(foo,w),# Open a writing,g = open(bar,r),# Open a reading,文件,的读取,/,写入,f.write(Hello World),buff,= g.read(),# Read all data,line = g.readline(),# Read a single line,lines = g.readlines(),# Read data as a list of lines,w,ith do,# py2.6,以后版本提供,格式化的输入输出,使用,%,来格式化字符串,for i in range(0,10):,f.write(2 times %d = %dn % (i, 2*i),27,目录操作,把,path1,目录下面的,*.html,更名为,*.htm,for,root,dirs,files in os.walk(path1):,for,item in files:,if,item-5:.upper() != .,HTML:continue,= os.sep.join(root,item),print,file1,= :-5+.htm,os.rename(, file1),28,匿名函数,lambda,从,Lisp,语言,借用,来,的,只是一,种,风格,可用函数替换,def,func(x):,. return x*2, func(3,) 6,g = lambda x: x*2,g(3),6,(lambda x: x*2)(3),6,请对下列数组进行排序,(,先,x,再,y,,类似于,SQL,中的,order by x,y),list1 = x:1,y:100,x:30,y:50,x:0,y:0,x:60,y:90,x:30,y:28,sorted(list1, lambda,a,b:cmp(a,x,a,y,),(b,x,b,y),29,字符编码,Python2.x,默认的是,OS,的本地编码,Python3.x,是,unicode,内部编码,.py,文件第一行,:,#,coding=utf-8,,不指定编码时,文件中包含非,ASCII,字符会报错,s1 = ,中文,1,s2 = u,中文,2,print unicode(s1,utf-8).encode(gbk),print,s2.encode(gbk),print type(unicode(s1,utf-8,),type(s2),type(s2.encode,(gbk),30,指针?引用?,Python,里面没有指针,所有都是对象,对象之间都是引用,(,引用计数方式),常用的对象都有,cache,默认是浅,拷贝,,深拷贝代码,:str:,import,copy,ls1 = 1,”test”,(3.4,7),“key”:1, “comment”:”your comment”,ls2,= copy.deepcopy(ls1,),31,正则表达式,导入模块,:,import rep = pile(ab*, re.IGNORECASE)p = pile(a-z+),match(),函数只,检测是不是,在,string,的开始,位置,只有在,0,位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,,match(),就返回,None,。,search,(),会扫描整个,string,查找,匹配,32,单元测试,unittest,模块中的,TestCase,类代表测试用例,TestCase,类的实例是可以完全运行测试方法,可选的设置 (,set-up,)以及清除(,tidy-up,)代码的对象,TestCase,实例的测试代码,可以单独运行或与其它任意数量的测试用例共同运行,简单测试用例,import unittest class DefaultWidgetSizeTestCase(unittest.TestCase):,def runTest(self): widget = Widget(The widget) assert widget.size() = (50,50), incorrect size,33,性能优化,Python,的开发效率很高,Python,的执行效率很低,比,C+,和,JAVA,都慢,循环,/,函数调用等很消耗资源,数据结构的性能很高,目前可以认为是优化到极致,优化方式:,用,timeit,分析之后优化对应代码,使用,psyco,做,JIT,加速,Hash,算法来替代某些常规语句,使用,C,模块来替换业务热点,部分地方可以使用,map,来替代,for in,循环,字符串少用,+,操作,特别是连续,+,不要迷恋语言性能,业务性能才是关键!,34,map/reduce,云计算的核心算法,Map,是将一个大任务拆分为很多个小,任务,Reduce,则将,每个小任务的,计算结果进行收集和,汇总,输出大,任务的最终,结果。,Python,中的代码,是不是有点云计算的味道?, seq = range(8),zip(seq,map(lambda x:x*x,seq,),(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49),reduce(,lambda x,y:x+y, xrange(1, 11),55,35,调用系统命令,os.system(), os.spawn*, os.popen*, popen2.*,A,、新,起一个,shell,去干活的,对系统的开销比较,大,B,、获得,输出等信息比较麻烦,不能与外部命令或工具,交互,C,、主,进程无法,控制,,调用进程会,block,commands,易,获得外部命令的,输出,B,、,C,subprocess,Python2.6,以后,版本提供,解决上述模块不足,36,getattr/setattr,Python,的类继承,动态方式调用基类函数,使用,dir(f),可以看到属性:,im_class,im_func, im_self,37,模块,程序可分成好几个模块:,一个,py,文件就是一个模块;,目录下面增加,_init_.py,也是,# numbers.py,def divide(a,b):,q = a/b,r = a - q*b,return q,r,def gcd(x,y):,g = y,while x 0:,g = x,x = y % x,y = g,return g,i,mport,语句,import numbers,x,y = numbers.divide(42,5),n = numbers.gcd(7291823, 5683),_import_(),动态载入模块,一个模块只载入一次,实例会继承新加载的模块,38,动态调用,定义,def loadModule(owner, device,):,name = smt.%s.%s%(owner.lower(), device.replace(-, ).lower(),module =,None,try:,module = _import_(name),except Exception, msg,:,name = .join(name.split(.):-1,),try:,module = _import_(name),except Exception, msg:,logger.info(msg._str,_(),if module is not None:,components = name.split(.),for comp in components1:module = getattr(module, comp,),return module,39,动态调用,执行,Owner,为厂家名称,device,为厂家旗下的设备。,如果找不到设备的,.py,文件,则去调用厂家的,.py,#,调用指定目录下的,pana/bm123.py,mod = loadModule(“pana”, “bm123”),if not mod:return,obj = mod.Smt(),obj.xxxx(),40,如何进行,python,开发呢?,41,*, Python,不要以,C/C+,的思维去开发,Python,不要以,JAVA,的思维去开发,Python,不要以,C#,的思维去开发,Python,不要以,PHP,的思维去开发,Python,Python,开发需要的是,Pythonic,(蟒之禅),42,8,荣,8,耻,以动,手实践为荣,以只看不练为耻,;,以打印日志为荣,以单步跟踪为耻,;,以空格缩进为荣,以制表缩进为耻,;,以单元测试为荣,以人工测试为耻,;,以模块复用为荣,以复制粘贴为耻,;,以多态应用为荣,以分支判断为耻,;,以,Pythonic,为荣,以冗余拖沓为耻,;,以总结分享为荣,以跪求其解为耻,;,43,书籍推荐,帮助手册,安装时附带的,Dive Into Python/,中文版,可爱的,Python,Python,源码剖析,-,高级,44,谢谢!,国内,Python,组:,python-,啄木鸟社区:,Python,官网:,Django,官网:,UliPad,:,wxPython,:,PyQT,:,45,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!