# --------------
    # 切片
# --------------
'''
    对于需要经常指定索引范围的操作，用循环十分频繁，因此，Python提供
    了切片（Slice）操作符，能大大简化这种操作。


'''
# --------------
    # 迭代
# --------------
'''
    如果给定一个list或tuple，我们可以通过for循环来遍历这个list或tuple，
    这种遍历我们称为迭代（Iteration）。
    Python 中，迭代是通过 for...in 来完成的，而很多语言比如C语言，迭代
    list是通过下标完成的。Python的 for 循环的抽象程度要高于C的for循环，
    因为Python的for循环不仅可以用在list或tuple上，还可以作用在其他可迭
    代对象上。虽然list这种数据类型有下标，但很多其他数据类型是没有下标的，
    但是只要是可迭代的对象，无论有无下标，都可以迭代。因为dict的存储不是
    按照list的方式顺序排序，所以迭代的结果顺序很可能不一样。

    默认情况下，dict迭代的是key。如果要迭代value，可以用：
        for value in dict.value()
    如果同时迭代key和value，可以用：
        for k,v in dict.items()

    使用for循环的时候，只要作用于一个可迭代对象，for循环就可以正常运行，
    而我们不太关心该对象究竟是list还是其他数据类型。那么如何判断一个对象
    是可迭代的呢？我们可以通过collections模块的iterable类型判断。
    另外，如何实现下标循环呢？可以使用python内置的enumerate函数可以把一
    个list变成索引-元素对，这样就可以在for循环中同时迭代索引和元素本身了
        for i,value in enumerate(["a","b","c"]):
            print(i,value)
'''
# --------------
    # 列表生成式
# --------------
'''
    列表生成式（List Comprehensions）是python内置的非常简单却强大的可以
    用来创建list的生成式，写列表生成式时，把要生成的元素放到前面，后面跟
    for循环，就可以把list创建出来。for循环之后还可以加上判断，这样我们就
    可以对产出的项进行筛选。
    运用列表生成式，可以写出非常简洁的代码。
'''
# --------------
    # 生成器
# --------------
'''
    通过列表生成，我们可以创建一个列表，如果我们仅仅需要访问前面几个元素，
    那后面绝大多数的元素占用的空间都浪费了。所以，如果列表元素可以按照某种
    算法推算出来，那我们是否可以在循环的过程中不断推算出后续的元素呢？这样
    就可以不必创建list，从而节省空间。这种一边循环一边计算的机制，称为：
        生成器（generator）
    要创建一个generator，有很多种方法。第一种方法很简单，只要把一个列表生
    成式的[]改成()，就创建了一个generator。
    我们创建一个generator之后，基本上永远不会调用next()，而是通过for循环
    来迭代它，并且不需要关心StopIteration的错误。
    generator非常强大。如果推算的算法比较复杂，类似列表生成式的for循环无
    法实现的时候，还可以用函数实现。
    另一种方法是，如果一个函数定义包含yield关键字，那么这个函数就不再是一
    个普通函数，而是一个generator。这里最难理解的就是generator和函数的执
    行流程不一样。函数是顺序执行，遇到return语句或最后一行函数语句就返回。
    而变成generator的函数，在每次调用next()的时候执行，遇到yield语句返回，
    再次执行时从上次返回的yield语句处继续执行。
    （杨辉三角的坑没有填。有空再填）
'''
# --------------
    # 迭代器
# --------------
'''
    可以直接作用于for循环的数据类型有以下几种：
    一类是集合数据类型，如list、tuple、dict、set、str等；
    一类是generator，包括生成器和带yield的generator function。
    这些可以直接作用于for循环的对象统称为可迭代对象：Iterable。
    可以使用isinstance()判断一个对象是否是Iterable对象。
'''


