《Python通用函数.doc》由会员分享,可在线阅读,更多相关《Python通用函数.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Python 函数2016年4月14日22:071、join()函数以下实例展示了join()的使用方法:#!/usr/bin/pythonstr = -;seq = (a, b, c); # 字符串序列print str.join( seq );以上实例输出结果如下:a-b-c2、str.zfill(width)将字符串str前面补0使得字符串长度为width3、lambda函数(匿名函数)a. lambda表达式返回可调用的函数对象.但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量.b. lambda 它只是一个表达式,而def是一个语句c. 定义一些抽象的,不会别
2、的地方再复用的函数d. lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值定义了一个lambda表达式,求三个数的和。用lambda表达式求n的阶乘。这里也可以把def直接写成lambda形式。如下lambda函数可以很好和python中内建filter(),map(),reduce()函数的应用程序结合起来,因为它们都带了一个可执行的函数对象.4、filter(function or None, sequence) - list, tuple, or string给定一个过滤函数和一个对象的序列,每个序列元素都通过这个过滤器进行筛选,保留函数返回为真的对象.filte
3、r函数为已知的序列的每个元素调用给定布尔函数.每个filter返回的非零(true)值元素添加到一个列表中.1234567#!/usr/bin/python2.5from random import randintallNums = for eachNum in range(10):allNums.append(randint(1,100)print filter(lambda x: x%2,allNums) #使用filter()来移除所有偶数12root10.1.6.200:# ./getOdd.py 89, 45, 41, 29, 5, 29, 855、map(.) map(functi
4、on, sequence, sequence, .) - listmap()内建函数与filter()相似,因为它也能通过函数来处理序列,但map()将函数调用映射到每个序列的元素上,并返回一个含有所有返回值的列表。 例如,映射函数是给每个进入的数字加10,并且将这个函数和一个数字的列表传给map().12 map(lambda x:x+10,0,1,2,3,4,5,6,7,8,9)10, 11, 12, 13, 14, 15, 16, 17, 18, 19 def add100(x): return x+100 . hh = 11,22,33 map(add100,hh) 111, 122,
5、 1336、reduce(.) reduce(function, sequence, initial) - value它通过取出序列的头两个元素.将他们传入二元函数来获得一个单一的值来实现.然后又用这个值和序列的下一个元素来获得又一个值,然后继续直到整个序列的内容都遍历完毕以后最后的值会被计算出来为止.reduce(func,1,2,3) 等同于 func(func(1,2),3)例如:计算从1加到10的和 12 print the total is:,reduce(lambda x,y:x+y),range(1,11)the total is: 55源文档 源文档 7、multiply(x,
6、y)返回x乘以ynp.multiply(2.0, 4.0)=8.0numpy.sign(x, out) x可以是单个参数也可以是数组Returns an element-wise indication of the sign of a number.The sign function returns -1 if x 0.Parameters:x : array_likeInput values.Returns:y : ndarrayThe sign of x.Examples np.sign(-5., 4.5)array(-1., 1.) np.sign(0)08、urlencode()函数原
7、理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%。urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符Urlencode()函数的参数为字典Urllib.quote()函数的参数为字符串9、sys和操作系统相关的调用,系统相关的信息模块 import sys sys.argv是一个list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象. sys.stdin.readline() 从标准输入读一行 sys.s
8、tdout.write(a) 屏幕输出a sys.exit(exit_code) 退出程序 sys.modules 是一个dictionary,表示系统中所有可用的module sys.platform 得到运行的操作系统环境 sys.path 是一个list,指明所有查找module,package的路径.源文档 10、文件操作1、打开文件 f = open(filename, r) r只读 w写 rw读写 rb读二进制 wb写二进制 w+写追加2、读写文件 f.write(a) f.write(str) 写一字符串 f.writeline() f.readlines() 与下read类同
9、f.read() 全读出来 f.read(size) 表示从文件中读取size个字符 f.readline() 读一行,到文件结尾,返回空串. f.readlines() 读取全部,返回一个list. list每个元素表示一行,包含n f.tell() 返回当前文件读取位置 f.seek(off, where) 定位文件读写位置. off表示偏移量,正数向文件尾移动,负数表示向开头移动。 where为0表示从开始算起,1表示从当前位置算,2表示从结尾算. f.flush() 刷新缓存 3、关闭文件: f.close()源文档 11、Itertools.groupby() :把迭代器中相邻的重复
10、元素挑出来放在一起: for key, group in itertools.groupby(AAABBBCCAAA):. print(key, list(group).A A, A, AB B, B, BC C, CA A, A, A实际上挑选规则是通过函数完成的,只要作用于函数的两个元素返回的值相等,这两个元素就被认为是在一组的,而函数返回值作为组的key。如果我们要忽略大小写分组,就可以让元素A和a都返回相同的key: for key, group in itertools.groupby(AaaBBbcCAAa, lambda c: c.upper():. print(key, lis
11、t(group).A A, a, aB B, B, bC c, CA A, A, a groupby(things, itemgetter(0) 以第0列为排序目标 groupby(things, itemgetter(1)以第1列为排序目标 groupby(things)以整行为排序目标from itertools import groupbyfrom operator import itemgetterthings = (2009-09-02, 11), (2009-09-02, 3), (2009-09-03, 10), (2009-09-03, 4), (2009-09-03, 22)
12、, (2009-09-06, 33)sss = groupby(things, itemgetter(0)for key, items in sss: print key for subitem in items: print subitem print - * 20结果123456789101112132009-09-02(2009-09-02,11)(2009-09-02,3)-2009-09-03(2009-09-03,10)(2009-09-03,4)(2009-09-03,22)-2009-09-06(2009-09-06,33)-源文档 源文档 12、itemgetter(dis)
13、返回迭代器的第dis维的数据,dis为序号from operator import itemgettera = 1,2,3 b=operator.itemgetter(1) /定义函数b,获取对象的第1个域的值 b(a)2 b=operator.itemgetter(1,0) /定义函数b,获取对象的第1个域和第0个的值 b(a)(2, 1)源文档 13、format()格式化输出函数Print (0t1n.format(qq, cnt)其中0t1n是格式化字符串,0,1是占位符 1 #使用str.format()函数 2 3 #使用占位符 4 print(Im ,.format(Hongte
14、n,Welcome to my space!) 5 6 print(# * 40) 7 8 #也可以使用0,1形式的占位符 9 print(0,Im 1,my E-mail is 2.format(Hello,Hongten,)10 #可以改变占位符的位置11 print(1,Im 0,my E-mail is 2.format(Hongten,Hello,)12 13 print(# * 40)14 15 #使用name形式的占位符16 print(Hi,name,message.format(name = Tom,message = How old are you?)17 18 print
15、(# * 40)19 20 #混合使用0,name形式21 print(0,Im 1,message.format(Hello,Hongten,message = This is a test message!)22 23 print(# * 40)24 25 #下面进行格式控制26 import math27 print(The value of PI is approximately .format(math.pi)28 print(The value of PI is approximately !r.format(math.pi)29 print(The value of PI is
16、approximately 0:.3f.format(math.pi)30 31 32 table = Sjoerd: 4127, Jack: 4098, Dcab: 767833 for name, phone in table.items():34 print(0:10 = 1:10d.format(name, phone)35 36 37 table = Sjoerd: 4127, Jack: 4098, Dcab: 863767838 print(Jack: 0Jack:d; Sjoerd: 0Sjoerd:d; Dcab: 0Dcab:d.format(table)14、maketr
17、ans()方法语法:from string import maketrans # 引用 maketrans 函数。str.maketrans(intab, outtab)参数 intab - 字符串中要替代的字符组成的字符串。 outtab - 相应的映射字符的字符串。15、translate()方法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中。str.translate(table, deletechars); table - 翻译表,翻译表是通过maketrans方法转换而来。 deletechars - 字符串中要过滤的字符列表
18、。以下实例展示了 translate()函数的使用方法:#!/usr/bin/pythonfrom string import maketrans # 引用 maketrans 函数。intab = aeiououttab = 12345trantab = maketrans(intab, outtab)str = this is string example.wow!;print str.translate(trantab);以上实例输出结果如下:th3s 3s str3ng 2x1mpl2.w4w!以上实例去除字符串中的 x 和 m 字符:#!/usr/bin/pythonfrom str
19、ing import maketrans # Required to call maketrans function.intab = aeiououttab = 12345trantab = maketrans(intab, outtab)str = this is string example.wow!;print str.translate(trantab, xm);以上实例输出结果:th3s 3s str3ng 21pl2.w4w!源文档 16、迭代器iterator1)for循环可以用于Python中的任何类型,包括列表、元祖等等。实际上,for循环可用于任何“可迭代对象”,这其实就是
20、迭代器(实现了迭代器协议的对象)。任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开。使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销。比如要逐行读取一个文件的内容,利用readlines()方法,我们可以这么写:12for line in open(test.txt).readlines():print line这样虽然可以工作,但不是最好的方法。因为他实际上是把文件一次加载到内存中,然后逐行打印。当文件很大时,这个方法的内存开销就很大了。利用
21、file的迭代器,我们可以这样写:12for line in open(test.txt): #use file iteratorsprint line这是最简单也是运行速度最快的写法,他并没显式的读取文件,而是利用迭代器每次读取下一行。17、生产器constructor包含yield语句的函数会被特地编译成生成器。当函数被调用时,他们返回一个生成器对象,这个对象支持迭代器接口。不像一般的函数会生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效【不像return 生成值后函数会退出,包含yield语句的函数会继续执行后
22、续代码】来看一个yield的例子,用生成器生成一个Fibonacci数列:12345678910def fab(max): a,b = 0,1 while a for i in fab(20):. print i,.0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 ,源文档 2,内积:np.dot(a,b) 就可以来计算a,b的内积,同样的np.inner(a,b)也可以,但是它要求最后一维度是要相同的,np.outer(a,b)则是将数组展平为一维数组再进行计算。3,求和,平均值,方差:比较简单,分别是np.sum(), np.mean(), np.var(), np.std()
23、(这个是标准差),关键是在加入axis参数以后要很好的区分;看下面的例子应该就比较清楚了:4,最值和排序:最值有np.max(),np.min() 他们都有axis和out(输出)参数, 而通过np.argmax(), np.argmin()可以得到取得最大或最小值时的下标。排序通过np.sort(), 而np.argsort()得到的是排序后的数据原来位置的下标。源文档 18、Zip() zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。1.示例1:x = 1, 2, 3y = 4, 5, 6z = 7, 8, 9xyz = zip(x, y, z)print x
24、yz运行的结果是:(1, 4, 7), (2, 5, 8), (3, 6, 9)2.示例2:x = 1, 2, 3y = 4, 5, 6, 7xy = zip(x, y)print xy运行的结果是:(1, 4), (2, 5), (3, 6)5.示例5:x = 1, 2, 3y = 4, 5, 6z = 7, 8, 9xyz = zip(x, y, z)u = zip(*xyz)print u运行的结果是:(1, 2, 3), (4, 5, 6), (7, 8, 9)一般认为这是一个unzip的过程,它的运行机制是这样的:在运行zip(*xyz)之前,xyz的值是:(1, 4, 7), (2
25、, 5, 8), (3, 6, 9)那么,zip(*xyz) 等价于 zip(1, 4, 7), (2, 5, 8), (3, 6, 9)所以,运行结果是:(1, 2, 3), (4, 5, 6), (7, 8, 9)源文档 19、collections.defaultdict()defaultdict(function_factory)构建的是一个类似dictionary的对象,其中指定了values的类型,是function_factory的类实例,而且具有默认值。collections.defaultdict(list)使用起来效果和运用dict.setdefault(list)比较相似
26、源文档 20、uniform() 函数uniform() 方法将随机生成下一个实数,它在x,y范围内。以下展示了使用 uniform() 方法的实例:#!/usr/bin/python# -*- coding: UTF-8 -*-import randomprint uniform(5, 10) 的随机数为 : , random.uniform(5, 10)print uniform(7, 14) 的随机数为 : , random.uniform(7, 14)以上实例运行后输出结果为:uniform(5, 10) 的随机数为 : 6.98774810047uniform(7, 14) 的随机数
27、为 : 12.2243345905源文档 21、id()检验对象标识符(地址)eg:id(a)21、python中的import,reload,以及_import_reload作用:对已经加载的模块进行重新加载,一般用于原模块有变化等特殊情况,reload前该模块必须已经import过。源文档 22、python time模块http:/ find()方法:查找子字符串,若找到返回从0开始的下标值,若找不到返回-1b. python 的index方法是在字符串里查找子串第一次出现的位置,类似字符串的find方法,不过比find方法更好的是,如果查找不到子串,会抛出异常,而不是返回-1c. rf
28、ind和rindex方法用法和上面一样,只是从字符串的末尾开始查找。源文档 24:python闭包闭包(Closure):内层函数引用了外层函数的变量(包括它的参数),然后返回内层函数的情况,这就是闭包http:/ 闭包,int与list在2.7中的区别1. 调用包含闭包函数的外函数的时候,返回的是闭包函数,但是闭包函数只有被再次调用的时候才会执行内部代码。2. 两次调用外函数的时候,即是输入了相同的参数,也会返回不同的闭包函数(地址不同)3. 返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。25:python的装饰器其实,装饰器就是一种闭包,对类会函数进行加
29、工生成功能更强大的函数。我们再回想一下装饰器的概念:对函数(参数,返回值等)进行加工处理,生成一个功能增强版的一个函数。再看看闭包的概念,这个增强版的函数不就是我们配置之后的函数吗?区别在于,装饰器的参数是一个函数或类,专门对类或函数进行加工处理。def makebold(fn): def wrapped(): return + fn() + return wrappeddef makeitalic(fn): def wrapped(): return + fn() + return wrappedmakeboldmakeitalicdef hello(): return hello worldprint hello() 执行结果hello world源文档