python 匿名函数,生成器迭代器

来源:互联网 发布:深圳电脑编程培训班 编辑:程序博客网 时间:2024/05/22 03:21

1. 匿名函数

a)  没有名字,lambda[agr1[,arg2…]]:expression

b)  表达式:Sum=lambda agr1,agr2:agr1+agr2;

Sum(10,20)

c)  函数可以做参数传递,

三个大数据用的函数:

foo=[2,3,2,5,6,5,52]

filter(lambdax:x%3=0,foo)//过滤留下能被三整除的数,

map(lambdax:x*2,foo)//遍历列表

mylist=map(lambdax:x,mylist)
for i inmylist:
    print(i)

 

reduce(lambdax,y:x+y,foo)//求foo里面的和

reduce需要导入模块  from functools import reduce

 

 

2. Sorted列表排序,小到大排序<asc>正序<dsc>倒序

Sorted(lisr,reverse=True)倒序排序,

 

 

 

 

3. 随机数:

a)  import random

       i.     random.choice(range(1-34))随机取1-33之间的1个随机数,可能重复

     ii.     random.choices(range(1-34),k=6,weight=)随机取1-33之间的1个随机数,可能重复

   iii.     random.sample(range(1,34),6)

4. sort和sorted排序的区别

a)  sort没有返回值,原来的列表顺序没了,

b)  sorted 返回一个新列表

5. 迭代器和生成器:

a)  迭代器是访问集合内的元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍结束.

b)  迭代器协议:对象需要提供next()方法,它要么返回下一个对象,要么引起一个

•迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。
•迭代器协议:对象需要要提供next()方法,它要么返回下一个对象,要么引起一个StopIteration异常
•可迭代对象:实现了迭代器协议的对象
•for,max,min,sum等使用迭代器协议访问对象
•构建迭代器的时候,以一种延迟计算(lazy evaluation)方式返回元素,这正是它的优点。比如列表含有中一千万个整数,
需要占超过400M的内存,而迭代器只需要几十个字节的空间。因为它并没有把所有元素装载到内存中,
而是等到调用 next 方法时候才返回该元素(按需调用 call by need 的方式,本质上 for 循环就是不断地调用迭代器的next方法)

•for循环实现 了迭代器
–for  i in [1,2,3,4]:
    print i
•文件对象提供迭代器协议
–with open('E:\\s133\\s131.txt') as f:
    for line in f:  #for循环使用迭代器协议访问文件
        print(line)

生成器:

•Python使用生成器对延迟操作提供了支持
•所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。这也是生成器的主要好处。
•Python有两种不同的方式提供生成器
–1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结返回一个结果,在每个结果中间,挂起函数的状态
,以便下次重它离开的地方继续执行果。yield语句一次
–2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

•使用生成器返回自然数的平方(注意返回的是多个值):

def gensquares(N):

for i in range(N):

yield i ** 2

for item in gensquares(5):

print item

使用普通函数:

def gensquares(N):

  res= []

  fori inrange(N):

      res.append(i*i)

  returnres

for item in gensquares(5):

   print item





•语法上和函数类似:
–区别:生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值
•自动实现迭代器协议:
–对于生成器,Python会自动实现迭代器协议,(如for循环,sum函数)。由于生成器自动实现了迭代器协议,所以,我们可以调用它的next()方法,并且,在没有值可以返回的时候,生成器自动产生StopIteration异常
•状态挂起:
–生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行


•生成器的好处是延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用
–sum([ifor i inxrange(10000000000)])
–sum(ifor i in xrange(10000000000))
•对于前一个表达式还没有看到最终结果电脑就已经卡死,对于后一个表达式,几乎没有什么内存占用。


•代码简洁,易于阅读
–求一段文字中,每个单词出现的位置

def index_words(text):
    result=[]
    if text:
        result.append(0)
    for index,letter inenumerate(text,1):
        if letter == ' ':
            result.append(index)
    return result
result=index_words("Iam rong")
for a in result:
    print(a)

使用生成器的情况:

def index_words(text):
    if text:
        yield 0;
    for index,letter inenumerate(text,1):
        if letter==' ':
            yield index,letter
result=index_words('Iam rong')
for a in result:
    print(a)



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 叮咯咙咚呛 dj听吧舞曲咚鼓dj330舞曲网 我大哥大 大哥大 大唐好大哥 大哥 大哥priest 帮大哥 大哥大哥欢迎你 大哥的硬糖 祝大哥 祝大哥歌词 大哥影院 明澈大哥 大哥大手机 大哥是对的 大哥欢迎你 大哥您来了 大哥你好吗 omg大哥 大哥mv 大哥txt 大哥番外 黑道大哥 大哥影视 卫兰大哥 大哥歌曲 大哥歌词 柯受良大哥 大哥网 大哥图片 大哥 卫兰 大哥 priest 大哥柯受良 大哥英文 大哥 歌词 priest大哥 大哥大哥你好吗 大哥大哥 色大哥 我的好大哥