1、yield的使用,参考:https://stackoverflow.com/questions/231767/the-python-yield-keyword-explained/231855#231855
来自于stackoverflow的,解答者经验非常的丰富,把yield的功能由简单到复杂都介绍了一遍。总结几个要点。
1、generator:只被遍历一次之后便从内存当中删除;
比如如下代码:
mygenerator = (x * x for x in range(9))
print mygenerator
for i in mygenerator:
print i
print type(mygenerator)
for i in mygenerator:
print i
2、当获得一个generator时,还不会调用函数,只有从具有迭代属性的语句中调用时才会条用函数,并且碰到yield就返回一个数据;
3、可以实现一些控制资源耗尽的功能;
4、Itertools:一个python库,含有一些特殊的函数来控制迭代向量。
2、lambda的使用,参考:https://stackoverflow.com/questions/890128/python-lambda-why/890188#890188
1、它来源于函数式编程的思想;
2、就是匿名函数(没有名字的函数);
3、比较特殊的应用就是函数里面调用函数;比如下面的代码:
def transform(n):
return lambda x: x +n
f= transform(3)
f(4) # is 7
3、map的使用,参考:http://my.oschina.net/zyzzy/blog/115096
1、其实就是并行操作的思想;
2、产生结果值的顺序可能是随机的,当然结果值是正确的;
4、reduce的使用:
1、将迭代向量(包括list,string等)进行汇总计算,比如:
①、print reduce(lambda x, y:x + '_' + y, 'my name is terry_feng!')
输出结果为:m_y_ _n_a_m_e_ _i_s__t_e_r_r_y___f_e_n_g_!
②、def jiecheng(n):
return reduce(lambda x, y: x * y, range(1, n+1))
这是个阶乘函数。
5、filter的使用:
1、获取满足条件的数据,比如:
def jiecheng(n):
return reduce(lambda x, y: x* y, range(1, n+1))
st= str(jiecheng(20140))
printlen(st)
printlen([i for i in st if i == '0'])
printlen(filter(lambda c:c == '0', st))
#获取20140的阶乘中0的数量
6、sorted的使用:
1、sorted函数是对迭代器进行操作的;
2、可使用key来传递关键字函数,比如:
①、student_tuples =[ ('john', 'A',15), ('jane', 'B',12), ('dave', 'B', 10), ]
sorted(student_tuples,key=lambda student: student[2]) # sort by age [('dave', 'B', 10),('jane', 'B', 12), ('john', 'A', 15)]
②、sort = sorted(originalDocuentsNames.items(), key=lambda originalDocuentsNames:originalDocuentsNames[1], reverse=True)
其中originalDocuentsNames为一个dict,reverse表示是否反转,为False表示升序,否则为降序。
关于上面提到的关于迭代的,可用iterable(迭代器)来表示。包括3类:
第一类是所有的序列类型,比如list(列表)、str(字符串)、tuple(元组)。
第二类是一些非序列类型,比如dict(字典)、file(文件)。
第三类是你定义的任何包含__iter__()或__getitem__()方法的类的对象。
还可参考:http://www.cnblogs.com/longdouhzt/archive/2012/05/19/2508844.html