关于python当中lambda、yield、map、reduce、filter、sorted的总结

     

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值