版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:print The quick brown fox, jumps over, the lazy dog在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。如果字符串本身包含怎么办?比如我们要表示字符串Im OK,这时,可以用 括起来表示。类似的,如果字符串包含,我们就可以用 括起来表示:如果字符串既包含又包含怎么办?这个时候
2、,就需要对字符串的某些特殊字符进行“转义”,Python字符串用进行转义。n 表示换行t 表示一个制表符 表示 字符本身如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀r,表示这是一个raw字符串,里面的字符就不需要转义了。如,r(_)/ (_)/。如果要表示多行字符串,可以用.表示如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释# -*- coding: utf-8 -*-print u中文在Python中,布尔类型还可以与其他数据类型做
3、and、or和not运算直接用 把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list索引从 0 开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推。因此,要打印第一名同学的名字,用 L0添加list 的append()方法或者insert()方法定位删除L.pop()对list中的某一个索引赋值,就可以直接用新的元素替换掉原来的元素,list包含的元素个数保持不变。缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。if age =
4、 18:要避免嵌套结构的 if . else .,我们可以用if . 多个elif . else .的结构,一次写完所有的规则奇数加和 for a in L:sum+=a x += 2偶数不要if x%2=0: Continuedict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。d=d.get(x)可以取到d中key后面的value个数 len(s)s = set(Adam, 95), (Lisa, 85), (Bart, 59)for name,score in s: print name,:,scores.
5、remove():s.add()比较函数cmp(x,y)如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:def fn(*args): print args可变参数的名字前面有个*号,我们可以传入0个、1个或多个参数给可变参数r.append(Li) 向r添加对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。对应上面的问题,取前3个元素,用一行代码就可以完成切片: L0:3Adam, Lisa, Bart只用一个:,表示从头到尾: L:切片操作还可以指定第三个参数: L:2Adam, Bart第三个参数表示每N个取
6、一个,上面的 L:2 会每两个元素取出一个来,也就是隔一个取一个。print L4:5-10: 先获得5的倍数,再取后10个首字母大写 def firstCharUpper(s): return s:1.upper()+s1:range(1,101)方法是使用enumerate() 函数: L = Adam, Lisa, Bart, Paul for index, name in enumerate(L):. print index, -, name. 0 - Adam1 - Lisa2 - Bart3 - Pauldict 对象有一个values() 方法,这个方法把dict转换成一个包含所
7、有value的list,这样,我们迭代的就是 dict的每一个 value:d = Adam: 95, Lisa: 85, Bart: 59 print d.values()# 85, 95, 59for v in d.(iter)values(): print v# 85# 95# 59items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和valued = Adam: 95, Lisa: 85, Bart: 59, Paul: 74 n=0sum = 0.0for k, v in d.iteritems(): sum = sum
8、+ v n+=1 print k,:,vprint average, :, sum/nx * x for x in range(1, 11)变量可以指向函数 f=abs根号 import mathdef add(x, y, f): return f(x) + f(y)print add(25, 9, math.sqrt)map()是 Python 内置的高阶函数,它接收一个函数 f和一个list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。def format_name(s): return s:1.upper()+s1:.lower()print m
9、ap(format_name, adam, LISA, barT)reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:reduce(f, 1, 3, 5, 7, 9, 100)结果将变为125,因为第一轮计算是:计算初始值和第一个元素:f(100, 1),结果为101。filter
10、()函数是Python内置的另一个有用的高阶函数,filter()函数接收一个函数 f和一个list,这个函数f的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:def is_not_empty(s): return s and len(s.strip() 0filter(is_not_empty, test, None, , str, , END)根为整数def is_sqr(x):return math.sqr
11、t(x)%1=0升序 def cmp_ignore_case(s1, s2): if s1.lower()s2.lower(): return 1 elif s1.lower() 0, test, None, , str, , END)装饰器newfndef performance(f): def print_time(*args, *kw): print call +f._name_+() in +time.strftime(%Y-%m-%d,time.localtime(time.time() return f(*args,*kw) return print_time装饰器有decorat
12、or的情况下,再打印函数名:def log(f): def wrapper(*args, *kw): print call. return f(*args, *kw) return wrapperlogdef f2(x): passprint f2._name_def performance(unit): def fn(f): functools.wraps(f) def wrapper(*args, *kw): t0 = time.time() back = f(*args, *kw) t1 = time.time() t = (t1 - t0) if unit =s else (t1 -
13、t0) * 1000 print call %s() in %s %s % (f._name_, t, unit) return back return wrapper return fnint()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做N进制的转换: int(12345, base=8)5349 int(12345, 16)74565假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:def int2(x, base=2): return int(x, bas
14、e)functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2: import functools int2 = functools.partial(int, base=2)import functoolssorted_ignore_case = functools.partial(sorted, cmp=lambda a,b: cmp(a.lower(),b.lower()print sorted_ignore_case(bob, about, Zoo, Credit)math.pow(2, 0.5)from
15、 math import log利用ImportError错误,我们经常在Python中动态导入模块:try: from cStringIO import StringIOexcept ImportError: from StringIO import StringIOPython 3.x已经改进了整数的除法运算,“/”除将得到浮点数,“/”除才仍是整数: 10 / 33.3333333333333335 10 / 33要在Python 2.7中引入3.x的除法规则,导入_future_的division: from _future_ import division print 10 / 33
16、.3333333333333335class A(object)passa1 = A()a2 = A()1.判断某个对象是否是类的实例isinstance(a1, A)2.判断两个对象是否是否完全一致(意思为: 判断两个变量引用的地址是否相同,如果相同,则两个变量实际引用为同一对象)用is进行判断a3 = a1print a1 is a33.判断两个对象中的内容是否相同用 = 进行判断print a1 = a2按照关键词排序L1 = p1, p2, p3L2 = sorted(L1,key=lambda x:)在定义 Person 类时,可以为Person类添加一个特殊的_init
17、_()方法,当创建实例时,_init_()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:class Person(object): def _init_(self, name, gender, birth): = name self.gender = gender self.birth = birth_init_()方法的第一个参数必须是self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。解释器内部会将*kw拆分成对应的dict.setattr()方法接受3个参数:setattr(对象,属性,属性的值)setattr
18、(self,k,v)相当于self.k = vkw.iteritems()历遍字典kw的所有key和value,分别匹配k,v*args 容纳任意变量的list*kwargs 容纳任意key,value的dictclass Person(object): def _init_(self, name, gender, birth, *kw): =name self.gender=gender self.birth=birth for k,v in kw.iteritems(): setattr(self,k,v)Python对属性权限的控制是通过属性名来实现的,如果一个属性由双
19、下划线开头(_),该属性就无法被外部访问。看例子:class Person(object): def _init_(self, name): = name self._title = Mr self._job = Studentclass Person(object): def _init_(self, name, score): =name self._score=scorep = Person(Bob, 59)print try: print p._scoreexcept AttributeError: print attributeerr
20、orclass Person(object): count=0 def _init_(self,name): =name Person.count+=1p1 = Person(Bob)print Person.countp2 = Person(Alice)print Person.countp3 = Person(Tim)print Person.count如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承:class Person(object): def _init_(self, name, gender): sel
21、 = name self.gender = gender定义Student类时,只需要把额外的属性加上,例如score:class Student(Person): def _init_(self, name, gender, score): super(Student, self)._init_(name, gender) self.score = score一定要用super(Student, self)._init_(name, gender)去初始化父类,否则,继承自Person的Student将没有name和gender。函数super(Student, self)将返回
22、当前类继承的父类,即Person,然后调用_init_()方法,注意self参数已在super()中传入,在_init_()中将隐式传递,不需要写出(也不能写)。多重继承的继承链就不是一棵树了,它像这样:class A(object): def _init_(self, a): print init A. self.a = aclass B(A): def _init_(self, a): super(B, self)._init_(a) print init B.class C(A): def _init_(self, a): super(C, self)._init_(a) print i
23、nit C.class D(B, C): def _init_(self, a): super(D, self)._init_(a) print init D.Python的网络服务器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有多进程ForkingMixin和多线程ThreadingMixin两种。要创建多进程模式的TCPServer:class MyTCPServer(TCPServer, ForkingMixin) pass要创建多线程模式的UDPServer:class MyUDPServer(UDP
24、Server, ThreadingMixin): pass多重 class BStudent(Student,BasketballMixin): PassClassC(A,B)返回属性:对于实例变量,dir()返回所有实例属性,包括_class_这类有特殊意义的属性。注意到方法whoAmI也是s的一个属性。首先可以用type()函数获取变量的类型,它返回一个Type对象。dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用getattr()和setattr( )函数了对int、str等内置数据类型排序时,Python的sorted()按照默认的比较函数cm
25、p排序,但是,如果对一组Student类的实例排序时,就必须提供我们自己的特殊方法_cmp_():class Student(object): def _init_(self, name, score): = name self.score = score def _str_(self): return (%s: %s) % (, self.score) _repr_ = _str_ def _cmp_(self, s): if : return 1 else: return 0从低到高return cmp(self.nam
26、e,)从高到底 return -cmp(,)如果一个类表现得像一个list,要获取有多少个元素,就得用len()函数。a, b = b, a + b其实就是多个变量的赋值运算,先算=右边,再赋值给左边变量:0)a=0,b=11)a=b=1,b=a+b=12)a=b=1,b=a+b=23)a=b=2,b=a+b=34)a=b=3,b=a+b=55)a=b=5,b=a+b=86)a=b=8,b=a+b=13要表示有理数,可以用一个Rational类来表示:class Rational(object): def _init_(self, p, q): sel
27、f.p = p self.q = q求最大公约数def gcs(a,b,c=1): if 0=a%2 and 0=b%2: return gcs(a/2,b/2,c*2); s = abs(a-b) m = min(a,b) if s = m: return m*c return gcs(s,m,c)如果要把Rational转为int,应该使用:r = Rational(12, 5)n = int(r)要让int()函数正常工作,只需要实现特殊方法_int_():class Rational(object): def _init_(self, p, q): self.p = p self.q
28、= q def _int_(self): return self.p / self.qclass Rational(object): def _init_(self, p, q): self.p = p self.q = q def _int_(self): return self.p / self.q def _float_(self): return self.p*1.0/self.qprint float(Rational(7, 2)print float(Rational(1, 3)以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(_foo)代表类的私有成员;以双下划线开头和结尾的(_foo_)代表python里特殊方法专用的标识,如 _
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论