python学习第十二天,生成器,列表推导式
2021-07-15 13:07
标签:toolbar 更改 简单 优缺点 函数对象 bsp span 问题 迭代器 ----->约定俗成: 函数中,只有一个位置参数时用argv表示 def func(argv): pass 1.生成器:自定义的迭代器 生成器有两种形式: a.生成器函数 b.生成器表达式 a. 比较send()和yield的区别: send()可以当yield来用,send()括号内需要有元素,向上一个yield发送数据,更改上一个yield的返回值, 所以第一次取值不能用send(),最后一个yield永远得不到send()传的值 比较yeild和return的区别: 区别:return:在函数中遇到return,则结束函数,给函数执行者一个返回值 yield:在函数中有yield,调用函数时不执行函数,只有当函数名().__next__时才执行一个yeild,并将值返回给它 一个next对应一个yeild,可以多次调用,生成器函数本质是一个迭代器. 内存级别对比iter()和生成器函数; iter()将可迭代函数转换为迭代器时,需要将可迭代函数的所有数据都加载到内存中才能转换,,这样会占用内存,不能处理大数据 生成器函数则不需要将数据都加载,而是要一个拿一个 生成器的基本应用:可分段生成无缝衔接 比较 注意: b. 生成器表达式 g = [i for i in range(100)] 是列表推导式 g = (i for i in range(100)) 是生成器表达式 2.列表推导式: 一行代码机会可以表示任何有规定的列表 有两种模式: 1.循环模式 : 变量(加工后的变量) + for i in iterable 2.筛选模式: 变量(加工后的变量) + for i in iterable + if条件 一次循环: 两次循环(循环不宜超过两次): 列表推导式的优缺点: 优点: 一行解决一个列表,简单方便 缺点:不易排错,不能解决所有列表问题问题,不要刻意使用 python学习第十二天,生成器,列表推导式 标签:toolbar 更改 简单 优缺点 函数对象 bsp span 问题 迭代器 原文地址:https://www.cnblogs.com/jiandanxie/p/9536477.htmldef func1(x):
x += 1
print(111111)
yield x #有yield的叫生成器函数
print(222222)
yield ‘alex‘
s = func1(5) # 叫生成器函数对象,这样不执行函数
s = s.__next__() #一个next对应一个yield
#yield 将值返回给 s.__next__()
def func1():
print(111)
count = yield 1
print(count)
print(222)
yield 2
print(333)
yield 3
g = func1()
a = g.__next__()
print(a)
print(g.send(‘alex‘)) #----> send 可以当__next__ 用,同时将send(‘alex‘)内的元素发送给上一个yield
print(g.__next__())
1.
def func(argv):
for i in range(1,argv):
print(‘骑士班%s期‘%i)
func(5)
2.
def func(argv):
for i in range(1,argv):
yield ‘骑士班%s期‘%i
g = func(5)
for j in range(1,5):
print(g.__next__())
3.
def func(argv):
for i in range(1,argv):
yield ‘骑士班%s期‘%i
for j in range(1,5):
print(func(5).__next__())
def func(argv):
for i in range(1,argv):
yield ‘骑士班%s期‘%i
g = func(10)
for j in range(1,5):
print(g.__next__())
for j in range(1,6):
print(g.__next__())
g = (i for i in range(100))
print(g.__next__()
list1 = [‘python %s 期‘%i for i in range(1,21)]
print(list1)
[‘python 1 期‘, ‘python 2 期‘, ‘python 3 期‘, ‘python 4 期‘]
list1 = [i*i for i in range(1,11)]
print(list1)
[1, 4, 9, 16]
list1 = [‘python %s 期‘%i for i in range(1,21) if i % 2 == 0]
print(list1)
names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘],
[‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]]
list1 = [j for i in names for j in i if j.count(‘e‘) == 2]
print(list1)
# 比较
print(list(j for i in names for j in i if j.count(‘e‘) == 2))