python 函数高级特性
来源:互联网 发布:新加坡apache国际集团 编辑:程序博客网 时间:2024/05/16 08:51
迭代
可以通过 for 循环来遍历这个 list 或 tuple,这种遍历我们称为迭代(Iteration)
只要是可迭代对象,无论有无下标,都可以迭代,比如 dict就可以迭代:
迭代的类型
判断可迭代对象
方法是通过 collections 模块的 Iterable 类型判断
In [1]: from collections import Iterable##字符串In [2]: isinstance('he',Iterable)Out[2]: True##列表In [3]: isinstance([1,2,3],Iterable)Out[3]: True##整型数In [4]: isinstance(22,Iterable)Out[4]: False##集和In [5]: isinstance({1,2,3},Iterable)Out[5]: True##字典In [6]: isinstance({'na':1,'asd':'we'},Iterable)Out[6]: True##元组In [7]: isinstance((1,2,3),Iterable)Out[7]: True
字典的迭代
默认情况下,dict 迭代的是 key,如果要迭代value则:
In [1]: d = {'name':'cici','age':14}In [2]: from collections import IterableIn [3]: for k,v in d.iteritems(): ...: print k,v ...: age 14name cici
列表的迭代
对 list 实现类似 Java 的下标循环
python内置的枚举方法enumerate,把一个 list 变成索引元素对
In [4]: for i,value in enumerate([1,2,3,4]): ...: print i,value ...: 0 11 22 33 4
元组的迭代显示
两个变量的迭代显示
In [6]: for x,y in [('a',1),('b',2),('c',3)]: ...: print x,y ...: a 1b 2c 3
1000以上的迭代
由于python的运算量仅仅是999,一旦大于999则会运算出错甚至使系统卡慢,所以在1000以上的运算就可以使用迭代
In [8]: g = (i*i for i in range(100000))In [9]: g = (i*i for i in range(1000000))In [10]: gOut[10]: <generator object <genexpr> at 0x151d3c0>##确认是否可迭代In [11]: isinstance(g,Iterable)Out[11]: True##迭代显示In [12]: g.next()Out[12]: 0In [13]: g.next()Out[13]: 1In [14]: g.next()Out[14]: 4##显示g的可用In [15]: dir(g)
列表生成式
列表生成式是Python 内置的非常简单却强大的可以用来创建 list的生成式
#!/usr/bin/env python# coding:utf-8_author_ = "lvah"'''@author:fairy@file:liebiao_pinfan.py@contact:xiaojun0118@foxmail.com@time:7/9/1711:00 AM@DESC;'''# 生成[1*1,2*2,3*3,...,7*7]列表# for循环li = []for n in range(1,8): li.append(n*n)print li# 引出 ——># 列表生成式:# 循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的 list.print [i * i for i in range(1, 8)]# 1-20,所有偶数的平方# 列表生成式可以嵌套if语句和for语句print [i * i for i in range(0, 20, 2)]print [i * i for i in range(0, 20) if i % 2 == 0]# 列表生成式,返回'123' 'ABC'两个字符串的结合,如下:# ['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C']print [i + j for i in '123' for j in 'ABC']# 字典的连接print [k + '=' + v for k, v in {'name': 'hh', 'age': '5'}.items()]# li = ['HELLO','World'] ——> 小写print [a.lower() for a in ['HELLO', 'World'] if isinstance(i,str)]
生成器
通过列表生成式,我们可以直接创建一个列表,受到内存限
制,列表容量肯定是有限的
在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的 list,从而节省大量的空间。在 Python 中,这种一边循环一边计算的机制,称为生成器(Generator)
#!/usr/bin/env python# coding:utf-8import time_author_ = "lvah"'''@author:fairy@file:生成器.py@contact:xiaojun0118@foxmail.com@time:7/9/172:03 PM@DESC;'''# 枚举方法,显示为索引-元素shopinfo = [ ('Iphon',1000), ('book',200), ('fentiao',3500)]for i,v in enumerate(shopinfo): print i,v# 在for循环里引用两个变量shopinfo = [ ('Iphon', 1000), ('book', 200), ('fentiao', 3500) ]for k, v in shopinfo: print k, v# 4.手动实现生成器# (Fibonicci):# 数列1,1,2,3,5,8,13,... def fib(mm): n, a, b = 0, 0, 1 while n < mm: print b, a, b = b, a + b n += 1 fib(5) def hello(): print 'a' yield 1 print 'b' yield 2 print 'c' yield 3 a = hello() a.next() a.next() a.next()# 异步I/Odef consumer(name): print '%s 准备吃粉条'%name while True: fentiao = yield print ('粉条[%s]做好了,被[%s]吃了')%(fentiao,name)# g = consumer('cici')# g.next()# g.send('ziranwei')def producer(name): c1 = consumer('Cici') c2 = consumer('Andy') c1.next() c2.next() print '开始制作粉条晚餐....' for i in ['凉拌','清蒸']: time.sleep(1) print '%s做了两份粉条'%name c1.send(i) c2.send(i)producer('Lily')
阅读全文
0 0
- python 函数高级特性
- python 函数高级特性
- Python函数的高级特性
- Python高级特性:函数参数传递研究
- python高级特性与高阶函数
- python基础3之函数高级特性
- Python编程_Lesson010_函数高级特性
- python集合与函数的高级特性
- Python高级特性
- Python的高级特性
- Python高级特性
- Python高级特性
- python高级特性
- Python高级特性:生成器
- python 高级特性
- Python学习----高级特性
- Python 高级特性 : 切片
- Python 高级特性 : 生成器
- HDU-4826(DP动态)
- 数据结构及算法学习(三)
- leetcode 5 Longest Palindromic Substring(1)
- ajax数据返回进行遍历
- Opencv:Microsoft C++ 异常: 内存位置 0x002af444 处的 cv::Exception
- python 函数高级特性
- C++复合类型(三)
- concurrentHashMap原理(JDK1.6和1.8的比对)
- 动态规划:从新手到专家
- JavaScript 函数用作对象有哪些隐藏问题?
- 显示计算机中的文件目录
- 华为机试:配置文件恢复、四则运算
- python 学习路线
- 剑指offer 练习二(Java版)