Python学习笔记 (高级特性)

高级特性
1、切片 
     list和tuple可以快速取用其中的一段元素,写作list[n:m]。
     正向索引:list[n:m]从索引号n取到索引号m-1,如果n是0可以省略。
     反向索引:list[-n:]取倒数n个元素
     带间隔的索引:list[n:m:k]从索引号n取到索引号m-1间隔是k
     取所有数[:],间隔k取所有数[::k],翻转所有数[::-1]
2、迭代 
     对于list和tuple可以用for XX in XX来迭代。
     例子:L=[1,2,'a']
               for each in L:
                     print(each)
        >>>1
               2
               a
      对于dict可以用for XX in XX来迭代key,用for XX in XX.values()来迭代value,用for            XX,YY in XX.items()同时迭代key,value。

      字符串也可以迭代,每次迭代一个字符。

      也可以同时迭代多个变量。
      例子:L=[(1,1),(2,3),(3,4)]
                for x,y in L:
                      print(x,y)
                >>>1 1
                        2 3
                        3 4
3、列表生成器
     使用[x表达式 for x in 可迭代对象 ]来生成list
     例子:
     >>> [x * x for x in range(1, 11)]
     [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
     
     >>> [x * x for x in range(1, 11) if x % 2 == 0]#加上if得出偶数的平方
     [4, 16, 36, 64, 100]
     
     >>> [m + n for m in 'ABC' for n in 'XYZ']#使用两层for循环
     ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

4、生成器
     创建列表需要一次性创建所有元素,占用很大空间。generator是一种类似的可迭代对           象,区别是不用一次性创建所有元素,在循环的时候才进行计算。
     generator有两种生成方式:
     1)列表生成器的[]改为()
     例子:g = (x * x for x in range(10))
     可以使用next()函数取得每一个返回值(很少用),或者使用for n in g取得返回值。
     2)函数定义时,使用yield进行返回,在每次调用next()的时候执行,遇到yield语句返           回,再次执行时从上次返回的yield语句处继续执行。
     例子:
     def odd():
    print('step 1')
    yield 1
    print('step 2')
    yield(3)
    print('step 3')
    yield(5)
    
    >>> o = odd()
   >>> next(o)
   step 1
   1
   >>> next(o)
   step 2
   3
   >>> next(o)
   step 3
   5
   >>> next(o)
  Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
  StopIteration
5、迭代器
         可以用for循环迭代的对象是Iterable。Iterator是迭代器不但可以用for循环,还可以         被next()函数不断调用,直到没有数据时最后抛出StopIteration错误。
         Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算,正是因为这种特       性Iterator可以表示一个无限大的数据流。
         可以使用iter()函数获得Iterator对象。

评论