python 匿名函数,生成器迭代器
2017-12-24 20:01
218 查看
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里面的和
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)
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)
相关文章推荐
- Python 迭代器与生成器
- python拗口语法点总计1:迭代器、生成器、元组
- python 生成器和迭代器介绍
- python yield generator (迭代器 生成器 协程) 理解
- python生成式、生成器和迭代器
- python之迭代器和生成器
- python拗口语法点总计1:迭代器、生成器、元组
- python基础之生成器迭代器
- Python迭代器与生成器用法实例分析
- python3 迭代器与生成器
- python之迭代器和生成器
- 【Python3之迭代器,生成器】
- 5.python(迭代器,装饰器,生成器,基本算法,正则)
- python的迭代器和生成器
- python迭代器和生成器简介
- python-迭代器、生成器、内置函数及面向过程编程
- Python的高级特性2:列表推导式,生成器与迭代器
- python中迭代器、列表解析、生成器的分析比较
- Python中生成器和迭代器的区别详解
- python迭代器和生成器