2018-06-19-Python全栈开发day18-迭代器和三元运算

1.迭代器协议

  对象提供一个.next()方法,执行next方法要么返回程序的下一项,要么得到一个异常程序,而且这个迭代只能向后进行(不合适的比喻:只能爸爸生儿子,不能儿子生爸爸)

 1.1 可迭代对象

  之前对于list、tuple、dict等可迭代的定义都是错误的

  可迭代对象是指:满足迭代器协议的对象

2.for循环的机制

  在之前的认知中,for循环后面跟着的就是可迭代对象,其实对于list、dict这些来说,for循环所做的事情,是在它们后面添加了一个__iter__()方法

  

s1=[1,2,3,4,]
for i in s1:
#其实内部的做法就是,s1.__iter__(),将list s1转换为可迭代对象,使其遵循迭代器协议,然后可以执行next方法

使用iter方法之后,列表就变成了一个支持迭代器协议的可迭代对象,可以使用next方法

s1=[1,2,3,4]
for i in s1:
    print(i)
print(s1.__iter__().__next__())
---
#使用next方法之后,进行遍历,不断的使用next方法,直到得到一个异常,迭代器结束。

3.为什么使用迭代器

  迭代器的好处:迭代器每进行一次next,才将数据放入内存进行计算。如果是list的话,一次要讲大量内存进入内存,数据比较多的话容易造成死机

  比如:

    计算列表中list(range(1000000))的和,需要一次性将这些数据放入内存,

    如果是迭代器的话,每次使用一个数据,第一次1+2,第二次3+3,一次类推,可能减少内存的使用。

4.三元运算

  三元运算可以看做是更简便化的列表,个人觉得类似于lambda,方便书写,减少代码数量

  

s1=['sb' if 5 >4 else 'xuzheng']
print(s1)

4.1 列表解析

  下面进行分析,正常情况下:

  

s1=[]
for i in range(1000):
    s1.append(i)
print(s1)

  列表解析:

  

s1=[i for i in range(1000)]
print(s1)

  判断和for循环进行拼接

  

s1=[i for i in range(1000) if i > 5]
print(s1)

  这是目前对迭代器和三元运算的理解,明天准备生成器的主要介绍。

转载于:https://www.cnblogs.com/hai125698/p/9201726.html

你可能感兴趣的:(2018-06-19-Python全栈开发day18-迭代器和三元运算)