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

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(lambda x:x,mylist)
for i in mylist:
    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Python中,生成器是一种特殊的函数,它使用yield语句来产生一个序列的值。生成器函数可以通过定义一个普通函数,但使用yield语句来替代return语句来创建。生成器函数可以在需要的时候生成值,而不是一次性生成所有的值,这样可以节省内存空间。\[3\]而匿名函数是一种没有函数名的函数,它使用lambda关键字来定义。匿名函数通常用于简单的函数功能体,可以在一行代码中定义函数并返回结果,而不需要使用def语句来定义一个具名函数。\[1\]\[2\]匿名函数常常用于行内函数定义或者推迟执行一些代码。 #### 引用[.reference_title] - *1* [Python生成器的send方法、递推函数、匿名函数及常用内置函数](https://blog.csdn.net/qdPython/article/details/127983610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [python数据结构之匿名函数lambda](https://blog.csdn.net/weixin_48077303/article/details/122315599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [详解 Python 列表推导式|迭代器|生成器|匿名函数](https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/125418910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值