(十九)Python学习之迭代器、生成器、三元表达式、列表解析及生成器表达式

(十九)Python学习之迭代器、生成器、三元表达式、列表解析及生成器表达式

一、迭代器

1.迭代的概念:
迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值;

2.迭代器的概念:
迭代器即迭代的工具;

3.可迭代对象概念:
可迭代对象指的是内置有__iter__方法的对象,即obj.__ iter__;

4.迭代器对象概念:
可迭代对象执行obj.__ iter__()得到的结果就是迭代器对象;
而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象;
注意:(1)文件类型是迭代器对象;
(2)迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象;

5.for循环的工作原理:
(1)执行in后对象的dic.__ iter__()方法,得到一个迭代器对象iter_dic;
(2)执行next(iter_dic),将得到的值赋值给k,然后执行循环体代码;
(3)重复过程(2),直到捕捉到异常StopIteration,结束循环;

dic = {'a': 1, 'b': 2, 'c': 3}
iter_dic = dic.__iter__()
print(iter_dic)
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())

在这里插入图片描述

二、生成器

1.生成器概念:
只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码;

2.生成器就是迭代器;

3.send函数:

例:x = yield 3
3相当于return控制的是函数的返回值,
x = yield另一个特性,yield接受send传过来的值,赋值给x;
注:对于表达式形式的yield,在使用时,第一次必须传None,g.send(None)等同于next(g);

def test():
    yield 1
    value = (yield 3)
    print(value)
    yield 4


g = test()
print(g)
n = g.__next__()
print(n)
s = g.send(2)
print(s)
s = g.send(5)

在这里插入图片描述
三、三元表达式

name = input('请输入名字: ')
res = 'mylove' if name == 'lujing' else 'other'
print(res)

在这里插入图片描述
在这里插入图片描述
四、列表解析
1.概念:
根据已有列表,高效创建新列表的方式;

2.语法:
[expression for iter_val in iterable]
[expression for iter_val in iterable if cond_expr]

3.优点:
方便,改变了编程习惯,可称之为声明式编程;

egg_list = ['鸡蛋%s' % i for i in range(10)]
print(egg_list)

在这里插入图片描述
六、生成器表达式
1.概念:
把列表推导式的[]换成()就是生成器表达式;

2.优点:
省内存,一次只产生一个值在内存中。

chicken = ('鸡蛋%s' % i for i in range(5))
print(chicken)
n = next(chicken)
print(n)
n = next(chicken)
print(n)
l = list(chicken)
print(l)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38936626/article/details/86750702
今日推荐