




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JSprint语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一 串输出:print 'The quick brown fox', 'jumps over', 'the lazy dog' 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量, 同一个变量可以反复赋值,而且可以是不同类型的变量。变量本身类 型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹 配,就会报错。如果字符串本身包含怎么办?比如我们要表示字符串I'm OK ,这时,可以用"&q
2、uot;括起来表示。类似的,如果字符串包含",我们就可以 用括起来表示:如果字符串既包含又包含"怎么办?这个时候,就 需要对字符串的某些特殊字符进行转义",Python字符串用 进行转义。n表示换行t表示一个制表符表示字符本身如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义 会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r, 表示这是一个raw字符串,里面的字符就不需要转义了。如,r'(_)/ (_)/'。如果要表示多行字符串,可以用“'”'表示如果中文字符串在 Python环境下遇到 UnicodeDeco
3、deError ,这是 因为.py文件保存的格式有问题。可以在第一行添加注释# -*- coding: utf-8 -*-print u'中文在Python中,布尔类型还可以与其他数据类型做and、or和not运算直接用把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list索引从0开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推。因此,要打印第一名同学的名字,用 L0添加list的append()方法或者insert()方法定位删除L.pop()对list中的某一个索引赋值,就可以直接用新的元素替
4、换掉原来的元素,list包含的元素个数保持不变。缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。ifage >= 18:要避免嵌套结构的if . else,我们可以用if .多个elif . else .的结构,一次写完所有的规则i上即巳>=1S;print 'adult1eli age >= 6:print 'teenager'$li- age >= 3:print kicTelse;print 'baby'奇数加和for a in L:sum+=a
5、x += 2偶数不要if x%2=0:Continuediet的第一个特点是查找速度快,无论 diet有10个元素还是10万 个元素,查找速度都一样。而list的查找速度随着元素增加而 逐渐下降。d=d.get(x)可以取到d中key后面的value个数 len(s)s = set('Adam', 95), ('Lisa', 85), ('Bart', 59)for name,seore in s:print name,':',seores.remove():s.add()比较函数cmp(x,y)如果想让一个函数能接受任意个参数,
6、我们就可以定义一个可变参数:def fn(*args):print args可变参数的名字前面有个*号,我们可以传入0个、1个或多个参数 给可变参数r.append(Li)向 r 添加对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。对应上面的问题,取前3个元素,用一行代码就可以完成切片:>>> L0:3'Adam', 'Lisa', 'Bart'只用一个:,表示从头到尾:>>> L:切片操作还可以指定第三个参数:>>> L:
7、2'Adam', 'Bart'第三个参数表示每N个取一个,上面的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 enumer
8、ate(L):. print index, '-', name.0 - Adam1 - Lisa2 - Bart3 - Pauldiet对象有一个values()方法,这个方法把diet转换成一个包含所有value的list,这样,我们迭代的就是 diet的每一个value :d = 'Adam': 95, 'Lisa': 85, 'Bart': 59 print d.values()# 85, 95, 59for v in d.(iter)values():print v# 85# 95# 59items()方法把diet对象转
9、换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和valued = 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 n=0sum = 0.0for k, v in d.iteritems():sum = sum + vn+=1print k,':',vprint 'average', ':', sum/nx * x for x in range(1, 11)变量可以指向函数f=abs根号 import mat
10、hdef 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 map(format_name, 'adam', 'LISA', 'barT')reduce()函数也是Python内置的一个高阶函数。reduce()函数接收 的参数
11、和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()函数是Python内置的另一个有用的高阶函数,filter()函数接收 一个函数f和一个list,这个函数f的作用是对每个元素进行判断, 返回Tru
12、e或False , filter()根据判断结果自动过滤掉不符合条件的 元素,返回由符合条件元素组成的新list。利用filter。,可以完成很多有用的功能,例如,删除 None或者空 字符串:def is_not_empty(s):return s and len(s.strip() > 0 filter(is_not_empty, 'test', None, '', 'str', 'END')根为整数 def is_sqr(x):return math.sqrt(x)%1=0升序 def cmp_ignore_case(
13、s1, s2):if s1.lower()>s2.lower():return 1elif s1.lower()<s2.lower():return -1else:return 0print sorted('bob', 'about', 'Zoo', 'Credit', cmp_ignore_case)像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为 闭包(Closure )。返回闭包不能引用循环变量,请改写 count()函数,让它正确返回能计算1x1、2x2、3x3的函数。def c
14、ount():fs = 口for i in range(1,4):def f(i):def g():return i*ireturn gfs.append(f(i)return fsf1, f2, f3 = count()print f1(), f2(), f3()通过对比可以看出,匿名函数lambda x: x * x实际上就是:def f(x):return x * x关键字lambda表示匿名函数,冒号前面的x表示函数参数。测试空字符print filter(lambda s:s and len(s.strip() > 0, 'test', None, '&
15、#39;, 'str',','END')装饰器new - fndef 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装饰器有decorator的情况下,再打印函数名:def log:def wrapper(*args, *kw):print 'c
16、all.'return f(*args, *kw)return wrapperlogdef f2(x):passprint f2._name_def performance(unit):def fn(f):functools.wrapsdef wrapper(*args, *kw):t0 = time.time()back = f(*args, *kw)t1 = time.time()t = (t1 - t0) if unit ='s' else (t1 - t0) * 1000print 'call %s() in %s %s' % (f._name_
17、, t, unit)return backreturn wrapperreturn 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, base)f
18、unctools.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', 'a
19、bout', 'Zoo', 'Credit')math.pow(2, 0.5)from math import log利用ImportError错误,我们经常在Python中动态导入模块:try:from cStringIO import StringIOexcept ImportError:from StringIO import StringIOPython 3.x已经改进了整数的除法运算,/”除将得到浮点数,/”除才仍是整数:>>> 10 / 3 3.3333333333333335 >>> 10 / 3要在Py
20、thon 2.7中引入3.x的除法规则,导入_future_的division >>> from _future_ import division>>> print 10 / 3 3.3333333333333335class A(object) passal = A()a2 = A()1 .判断某个对象是否是类的实例isinstance(a1, A)2 .判断两个对象是否是否完全一致(意思为:判断两个变量引用的地址是否相同,如果相同,则两个变量实际引用为同一对象)用is进行判断a3 = alprint al is a33 .判断两个对象中的内容是否相同用=
21、进行判断print al = a2按照关键词排序L1 = p1, p2, p3L2 = sorted(L1,key=lambda x:)在定义Person类时,可以为Person类添加一个特殊的_init_() 方法,当创建实例时,_init_()方法被自动调用,我们就能在此为 每个实例都统一加上以下属性:class Person(object):def _init_(self, name, gender, birth): = nameself.gender = genderself.birth = birth _init_()方法的第一个参数必须是self (也
22、可以用别的名字,但建 议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何 区别。解释器内部会将*kw拆分成对应的diet.setattr()方法接受3个参数:setattr(对象,属性,属性的值) setattr(self,k,v) 相当于 self.k = vkw.iteritems()历遍字典kw的所有key和value ,分别匹配k, v*args容纳任意变量的list*kwargs 容纳任意 key, value 的 dietclass Person(object):def _init_(self, name, gender, birth, *kw):=na
23、meself.gender=genderself.birth=birthfor k,v in kw.iteritems():setattr(self,k,v)Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(_),该属性就无法被外部访问。看例子:class Person(object):def_init_ (self, name): = nameself._title = 'Mr'self._job = 'Student'class Person(object):def _init_(self, name, scor
24、e):=nameself._score=scorep = Person('Bob', 59)print try:print p._scoreexcept AttributeError:print 'attributeerror'class Person(object):count=0def _init_(self,name):=namePerson.count+=1pl = Person('Bob')print Person.countp2 = Person('Alice')prin
25、t Person.countp3 = Person('Tim')print Person.count如果已经定义了 Person类,需要定义新的 Student和Teacher类时,可以直接从Person类继承:class Person(object):def _init_(self, name, gender): = nameself.gender = gender定义Student类时,只需要把额外的属性加上,例如 score :class Student( Person ):def _init_(self, name, gender, score):su
26、per(Student, self)._init_(name, gender) self.score = score定要用 super(Student, self)._init_(name, gender) 去初始化父 类,否贝U,继承自 Person 的Student将没有name和gender。函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用_init_()方法,注意self参数已在super()中传入,在 _init_()中将隐式传递,不需要写出(也不能写)。多重继承的继承链就不是一棵树了,它像这样:class A(object):def
27、_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 'init C'class D( B, C ):def _init_(self, a):super(D, self)._init_(a)print 'init D'Python 的网络服务
28、器有 TCPServer、UDPServer、 UnixStreamServer 、UnixDatagramServer ,而服务器运行模式 有 多进程ForkingMixin 和 多线程ThreadingMixin 两种。要创建多进程模式的TCPServer :class MyTCPServer(TCPServer, ForkingMixin) pass要创建多线程模式的UDPServer :class MyUDPServer(UDPServer, ThreadingMixin): pass多重 class BStudent(Student,BasketballMixin):PassClas
29、sC(A,B)返回属性:对于实例变量,dir()返回所有实例属性,包括'class、这类有特殊意义的属性。注意到方法'whoAml '也是s的一个属性。首先可以用type()函数获取变量的类型,它返回一个Type对象。dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用getattr()和setattr()函数了 对int、str等内置数据类型排序时,Python的sorted()按照默认的 比较函数cmp排序,但是,如果对一组 Student类的实例排序时, 就必须提供我们自己的特殊方法cmp():class Student(ob
30、ject):def _init_(self, name, score): = nameself.score = scoredef _str_(self):return '(%s: %s)' % (, self.score)_repr_ = _str_def _cmp_(self, s):if < :return -1elif > :return 1else:return 0从低到高 return cmp(,)从高至U底 return -c
31、mp(,)如果一个类表现得像一个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):self.p = pself.q = q求最大公约数
32、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*creturn 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 = pself.q = qdef _int_(self):return self.
33、p / self.qclass Rational(object):def _init_(self, p, q):self.p = pself.q = qdef _int_(self):return self.p / self.qdef _float_(self):return self.p*1.0/self.qprint float(Rational(7, 2)print float(Rational(1, 3)以单下划线开头(_foo)的代表不能直接访问的类属性,需通过 类提供的接口进行访问,不能用“ from xxx import *”而导入;以双下划线开头的(_f。)代表类的私有成员;以
34、双下划线开头和结 尾的(foo)代表python里特殊方法专用的标识,如 _init_()代表类的构造函数。因为Python支持高阶函数,在函数式编程中我们介绍了装饰器函数, 可以用装饰器函数把get/set方法 装饰”成属性调用:class Student(object):def _init_(self, name, score): = nameself._score = scorepropertydef score(self):return self._scorescore.setterdef score(self, score):if score < 0 or s
35、core > 100:raise ValueError('invalid score')self._score = score第一个 score(self)是 get 方法,property 装饰,第二个 score(self, score)是 set 方法, score.setter 装饰, score.setter 是前个 property装饰后的副产品。一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法_call_()。我们把Person类变成一个可调用对象:class Person(object):def _init_(self, name, gender): = nameself.gender = genderdef call_(self, friend):print 'My name is %s' print 'My friend is %s'% friend斐波那契数列:class Fib(object):def _call_(self,num):L=0,1i=2for i in range(2,num):L.append(sum(L-2:)return Lf = Fib()print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国工业烤箱市场发展前景预测及投资战略咨询报告
- 中国智能条形显示屏行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
- 中国小麦行业市场调查研究及投资前景预测报告
- 2025年 甘肃招聘聘用制教师考试试题附答案
- 2025年中国电链锯行业市场全景分析及投资策略研究报告
- 2023-2029年中国装修板材行业市场深度评估及投资战略规划报告
- 中国大楔角Ⅴ带项目投资可行性研究报告
- 中国海南养老地产行业市场发展监测及投资潜力预测报告
- 中国养蚕及深加工行业市场全景调研及投资规划建议报告
- 卧铺车行业深度研究分析报告(2024-2030版)
- 会计法课件完整版本
- 小儿静脉留置针穿刺技巧与维护
- 方解石采购合同范本
- 辽宁省大连市甘井子区2023-2024学年八年级下学期期末考试物理试题
- 专升本合同范本
- 老年人体检分析报告及改进措施
- SAG超级抗原 细胞免疫抗衰
- SY-T 6966-2023 输油气管道工程安全仪表系统设计规范
- 身份证知识课件
- GB/T 43780-2024制造装备智能化通用技术要求
- 实验10乙醇乙酸的主要性质
评论
0/150
提交评论