Python中 内置函数
来源:互联网 发布:淘宝帐号登录 编辑:程序博客网 时间:2024/05/24 06:34
Map
map 函数在python3里面不再像以前一样,返回的是结果集,现在它返回的是一个map object
Map对象也相当于一个生成器表达式,同样拥有next()方法
>>> map((lambda x:x),(1,2,3))<map object at 0xb714b7ac>>>> F=map((lambda x:x),(1,2,3)) #所以说map对象也是一个可迭代对象,每次只求一个值>>> next(F)1
可以通过list函数或列表解析来实现对map对象进行循环调用
>>> list(map(abs,(-1,2,-4)))[1, 2, 4]>>> [i for i in map(abs,(-1,2,-4))][1, 2, 4]Map对象每一次next()方法返回的都是经过expr处理过后的表达式的值,如F=map(iter,((1,2,3),(5,4),(6,7))) 它每次得到的就是元组迭代对象
Range
Range 函数返回一些列连续增加的整数,可用作for中的索引,指定重复的次数
>>> list(range(5, -5, -2)) #第一个为“下限”,第三个为步值[5, 3, 1, -1, -3]>>> for i in range(3): #等价与C++中 for (i=0,i<3,i++)... print(i, 'Python')
其实我以前一直有个疑问就是:比如形式for i in range(6),它是先求出(0,1,2,3,4,5)这个结果集,然后变成形式for i in (0,1,2,3,4,5)把后面当成一个元组进行处理,还是你每执行一次循环,range对象求一个值赋给你呢?
我当时之所以这么认为,因为感觉for i in file,你看人家file就是一个整体数据块在那放着,而range(6)是不是也得先转换为一个数据块呢?其实完全有点进入误区了。你只需把他们两个都当成对象就行了,对于对象file,每一次循环它都是把next(temp)赋值给i;然后我range(6)也就类似呗,每一次也都将next(temp)赋值给i就行了。只是它俩的表现形式是对于file,它是取得了一行数据,而range(6)我们是得到了一个数,看着可能有点疑问,我本身是一个range(6)对象,怎么最后会出来一个数字呢?可以想象的是range对象中的next方法肯定是return一个迭加数值,或者说是yield出来一个值。。
编译结束后,是否是一个数据块等待着你来进行处理,关键是看它的next方法,到底是返回一个generator object,还是一个列表解析;最直接的方式就是把给嵌套函数赋予相应的值,查看它的结果
>>> a=range(6)>>> arange(0, 6) #从结果可以看出它是每一次循环才求出一个值付给i>>> next(a)TypeError: range object is not an iterator>>> temp=iter(a)>>> next(temp)0>>> next(temp)1>>> temp2=iter(a)>>> next(temp2)0
list
list 对对象进行iter调用,然后for循环加入到一个元组中。
>>> list('me')['m', 'e']>>> list((1,2,3))[1, 2, 3]>>> list(((1,2,3),(4,5,6))) [(1, 2, 3), (4, 5, 6)]>>> list(2,3,3)TypeError: list() takes at most 1 argument (3 given)>>> list((1,2,3),(4,5))TypeError: list() takes at most 1 argument (2 given)
list 可以对一个迭代对象,循环处理,并返回每次循环结果组成的元组,相当于进行列表解析
>>> M=map(pow,(1,2,3),(4,5,6)) #我们前面已经说了,现在的map函数是返回一个map object 不再是结果集 >>> M<map object at 0xb714aa8c>>>> list(M)[1, 32, 729]>>> [i for i in map(pow,(1,2,3),(4,5,6))] #列表解析形式[1, 32, 729]
并行遍历zip
函数返回并行元素的元组的列表,
zip不仅仅是用于列表,同样可以用于string,Zip会以最短序列长度为准来截断所得到的元组
>>> L1 = [1,2,3,4]>>> L2 = [5,6,7,8]>>> zip(L1,L2)[(1, 5), (2, 6), (3, 7), (4, 8)]>>> for (x,y) in zip(L1,L2)
根据下面的输出结果,我们可以知道如果zip在被嵌入调用的时候,它是随着循环一次求出一个值,然后付给i
>>> Z=zip((1,2,3),(3,4))>>> Z<zip object at 0xb714aa6c>>>> next(Z)(1, 3)>>> next(Z)(2, 4)>>> list(zip((1,2,3),(3,4))) #list等价与列表解析,对它进行for循环输出显示[(1, 3), (2, 4)]>>> list(zip((1,2)))[(1,), (2,)]
Dict构造字典
平时让你写字典的话,很简单,直接大括号里面键值对就行。但是如果就给你两个列表呢?可以zip和内置函数dict
>>> keys = ['spam', 'egg', 'toast']>>> vals = [1,3,5]>>> D3 = dict(zip(keys,vals))>>> D3{'toast': 5, 'egg': 3, 'spam': 1}
enumerate 产生偏移和元素
>>> s = 'spam'>>> e = enumerate(s)>>> e<enumerate object at 0xb72938c4>>>> next(e) #第一次next读的是第一个元素(0, 's')>>> for (offset,item) in enumerate(s):... print (item, 'appear at offset', offset) #因为它每次返回一个元组包含两项,一项位移,一项元素值... ('s', 'appear at offset', 0)('p', 'appear at offset', 1)('a', 'appear at offset', 2)('m', 'appear at offset', 3)
下面是一个易错点
>>> L=[1,2,3,4,5] #我们想使列表中每个元素都加1,方式一会失败。>>> for x in L:... x +=1... >>> L[1, 2, 3, 4, 5]>>> for i in range(len(L)): #千万别用形式in L,因为你想当于对L遍历,这个并不会造成死循环,但却会有出界问题。... L[i] +=1... >>> L[2, 3, 4, 5, 6]
Iter
是产生一个对象的迭代器,也就是说它里面可以储存访问所指对象的状态信息。例如对对象next()到那个位置了。
>>> F=map(iter,((1,2,3),(5,4),(6,7)))>>> F<map object at 0xb710550c>>>> for i in F:... print(i)... print(next(i))... <tuple_iterator object at 0xb710574c> #每次next都会指向下一层,就现在而言是元组的开头1<tuple_iterator object at 0xb710576c>5<tuple_iterator object at 0xb710574c>6
- Python中 内置函数
- Python中一些内置函数
- python中内置函数整理
- Python中几个内置函数和其他
- Python中class的内置函数__str__
- Python中class的内置函数__str__
- Python中class的内置函数__str__
- python中几个内置函数的用法
- Python中内置的字典函数
- Python中列表的内置函数
- python函数: 内置函数
- python 内置函数
- python内置函数
- Python常用内置函数
- Python常用内置函数
- python内置函数
- python 内置函数
- python 内置函数
- XPath 对xml文件操作
- 启动loadrunner的agent时,发现日志中报端口已被占用,启动失败解决办法
- Pattern Pathology
- Beginning Python - Chapter6 : More Abstraction
- iterator/generator 应用举例 Mymap / Myzip
- Python中 内置函数
- sqllite 你懂得 生成db文件
- C读取文件内容
- C#正则表达式整理备忘
- 【smarty项目源码】模拟smarty模版文件的解析过程
- pipe实例
- Eclipse Workbench Structure分析
- 如何在 Windows XP 中定位域控制器
- 深入理解Hadoop集群和网络