1、Python教学培训讲义,2011年06月 吴昊远,目录,4、Python中的面向对象,3、Python中的类和函数,1、Python入门及常用语法分析(上),2、Python入门及常用语法分析(下),5、用Python实现简单的聊天功能,6、用Eclipse调试python代码(选),Python 的历史 .问 baidu or google Python的IDE搭建 服务端(编译,解释器) 开发工具eclipse,ironPython,vs2008+ 为什么要学Python Python相对于其他语言的优缺点 Python的应用领域 anywhere,Python入门及常用语法分析,所有语
2、言的入门程序-Hello World! Hello World 的来历 Brian Kernighan & Dennis Ritchie两位作者的The C Programming Language 一书中第一个范例就是输出 Hello world!该书是最权威的C语言教科书,两位作者正是大名鼎鼎的C语言发明人,昵称“K&R” 我们的第一个示例 print Hello BK_Test print 1+1 print 1+1 =?,Python入门及常用语法分析,Python入门及常用语法分析,格式化字符串 字符串:%s 整型数:%d 无符号整型数:%u 八进制:%o 十六进制:%x %X 浮点
3、数:%f 科学记数法: %e %E 根据数值的不同自动选择%e或%f: %gExample: print “The total is %0.2f“ %56.3598 print “The total is %0.4f“ %56.3598 print “The total is %d“ %56.3598 Obj=raw_input() Print “你是%s”%Obj http:/ 基本数据类型 : 字符串,整数,浮点数,布尔型。集合类型:列表(List),元组(Tuple),字典(Dictionary或Hash)列表(List)List的定义。 aList = 23 或者 bList = 1,
4、2,3print bList1 List常用操作:append, del, + ,*, len(list) 0 * 5Tuple(元组)的定义 aTuple = (1, 3, 5) print aTuple,Python入门及常用语法分析,列表对象支持的方法append(x) count(x) :X在List中的个数 extend(L) Index(x) insert(i,x) pop(x) remove(x) reverse() sort()Example: list.append(x)#将元素x加入list列表 list.sort() 对列表list进行排序元组可以用方括号括起下标做索引
5、元组一旦创建就不能改变列表大部分操作同样适用于元组,Python入门及常用语法分析,Python中的控制结构:Python支持三种不同的控制结构:if,for和while,不支持C语言中的switch语句。(1)if 语句的用法:if EXPRESSION1:STATEMENT1elif EXPRESSION2:STATEMENT2else:STATEMENT3for语句的用法:mylist = “for statement“for word in mylist:print wordelse: #最终执行print “End list“,Python入门及常用语法分析,while语句的用法:a
6、 = 0while a 5:a = a + 1print aelse:print “as value is five“Python 循环中的控制语句 break: 终止当前循环 continue: 跳过本次循环 pass: 什么事都不错,Python入门及常用语法分析,Python中的字典: 字典是python中唯一内置映射数据类型。 通过指定的键从字典访问值,即 key,value模式 字典的使用: a = a:aa, b:bb ac=cc a.has_key(a) #判断字典中是否存在此值字典的常用方法: has_key(x) keys() values() items()clear()
7、copy() update(x) get(x,y),Python入门及常用语法分析,函数定义:def function_name(arg1,arg2,.):statementreturn value函数名: 函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号; 函数名是区分大小写的。 函数名不能是保留字。,Python入门及常用语法分析,Python中的类:简单例子 #!/usr/bin/python #-*- encoding:utf-8 -*- class test: #定义一个test类desc = “这是一个测试类。“ #在类中定义一个属性des
8、cdef _init_(self,name1): #对象构造函数,初始化类self.name1 = name1def show(self,name2): #在类中定义一个方法show()print “hello world“print name1:,self.name1print name2:,name2调用 obj = test(这是传递给name1的值) #生成test类的实例对象 print obj.desc #调用类中的desc属性 obj.show(这是传递给name2的值) #调用类中的show()方法,Python入门及常用语法分析,类的首字母大写, 没有特别原因不要在前面加 “
9、T” 或者 “C” 什么的 函数和变量尽量全小写, 单词间下划线连接 python命名规范(约定): 类里面 “单下划线” 开始的成员变量叫做保护变量, 意思是只有类对象和子类对象自己能访问到这些变量; 而 “双下划线“ 开始的是私有成员, 意思是只有类对象自己能访问, 连子类对象也不能访问到这个数据。,Python入门及常用语法分析,面向对象编程class Foo:def _init_(self, a, b):self.a = aself.b = bdef show_a(self):print self.adef show_b(self):print self.b_init_ 函数:每次生成
10、类的时候都会执行的, self 指向类对象自身。 记住, 类函数(或者叫做方法) 它的第一个参数 “self” 不要忘记写了foo_obj = Foo(“Im A“, “Im B“)foo_obj.show_a()foo_obj.b = “Hello world!“foo_obj.show_b(),Python入门及常用语法分析,Exception 异常捕获结构:Try: Except Exceptionname: . Except:. Else:. Finally:.自定义异常:class MyError(Exception):passraise 关键字 可以抛出自定义的异常例: raise
11、 MyError Ps:一定注意先后顺序, 要先定义异常类后才可以使用, 而不能上来就用。,Python入门及常用语法分析,Python的数据类型都有哪些?Python的控制语句有哪几种?Python中的异常如何捕获在循环语句中,continue,和break分别起什么作用?Python中的类和函数如何定义,如何调用?Python类中如何控制访问权限X,y=a,b print x,y x=1 y=2 x,y=y,(x+y) print x,y,基础知识复习,_new_方法 每一个 new-style class 都有一个名为_new_的静态方法. 当你调用 C(args,kwds)创建一个C实
12、例时,python内部调用的是 C._new_(C,*args,*kwds). _new_方法的返回值 x 就是该类的实例. 在确认 x 是C的实例以后, python调用C._init_(x,args,*kwds)来初始化这个实例. 也就是说,对新类C来讲,语句 x=C(23)等同于 x = C._new_(C, 23) if isinstance(x, C): C._init_(x, 23) _new方法拥有函数工厂的绝大部分弹性. 根据实际需求,我们可以让new_返回一个已有的实例或者创建一个新的实例. 下面举一个通过重载_new_方法实现独身对象的设计模式的例子: class Sing
13、leton(object): _singletons = def _new_(cls, *args, *kwds): if not cls._singletons.has_key(cls): #若还没有任何实例 cls.singletonscls = object.new_(cls) #生成一个实例 return cls._singletonscls #返回这个实例 Singleton的所有子类(当然是没有重载_new方法的子类)都只可能有一个实例. 如果该类的子类定义了一个init方法,那么它必须保证它的init_方法能够安全的对同一实例进行多次调用.,静态方法staticmethod #静
14、态方法修饰符,表示下面的方法是一个静态方法 def astatic( ): print a static method anInstance = AClass( ) AClass.astatic( ) # prints: a static method anInstance.astatic( ) # prints: a static method类方法classmethod #类方法修饰符 def aclassmet(cls): print a class method for, cls._name_ class ADeriv(ABase): pass bInstance = ABase( )
15、 dInstance = ADeriv( ) ABase.aclassmet( ) # prints: a class method for ABase bInstance.aclassmet( ) # prints: a class method for ABase ADeriv.aclassmet( ) # prints: a class method for ADeriv dInstance.aclassmet( ) # prints: a class method for ADeriv,前面提到的操作函数和语句块是传统的面向过程编程,而编写大型程序,通常采用面向对象编程。类和对象是面向
16、对象编程的两个主要方面,类创建一个新类型,而对象是类的实例。Python没有什么值类型与引用类型之分,它把所有事物统统看作是类。面向对象实质上是一种思想,并不是一门技术。面向对象讲求一切皆对象面向对象的三大特性 继承 封装 多态为什么要面向对象? 灵活性, 重用性。,Python中的面向对象,继承关系可以被传递,如果c1是c2的子类,c2是c3的子类,那么c1也是c3的子类。 如果a继承b, 那么a具有b的一切属性和方法。Python支持多继承 class A:def _init_(self):pass class B:def _init_(self):pass class C(A,B):de
17、f _init_(self):passsex=def Say(self):print self.name+ self.sex+self.ageSuper关键字,继承,Python 中的多态并没有完全实现,Python中只是利用多元化来实现部分多态的特性 class Person: def _init_(self,name):self.Name=name Name=nameSex=manAge=agedef Say(self,message):print self.Name+message class Role(Person):def _init_(self,name,roleName):Per
18、son._init_(self,name)self.RoleName=roleName RoleName=roleName# light or dark def Say(self,message):print self.RoleName+self.Name+message,多态 (override overload),至此, python的最基础得语法基本上已经都讲完了, 当然如果针对这些知识要是仔细斟酌的话, 你还会发现很多的新东西。 这就要看个人的爱好和决心了学习语言本就是一门枯燥的学问,而且作为一种技能,光理论是远远不够的,如果大家真的想学, 希望课下能用我们讲过的知识和自己网上搜罗的知识多多练习,也可以自己设计一个小程序,利用空闲时间逐渐完善然后与大家分享成果。慢慢的,你会发现,你已经变成了大师好啦, 让我们一起开始我们的python之路吧!有问题一起交流,有发现一起分享,学习建议,鸣谢,