Python高级特性


Python语法糖


  • 对于取制定索引范围的操作,Python提供了切片(Slice)实现。例如:L[0:3],这里表示的是从索引0开始取,知道索引3为止,左闭右开的区间如果第一个数是0,还可以省略[:10:2]其中的2表示每两位取一个。[:]表示原样复制一个list。

  • 默认情况下,dict迭代的是key。如果要迭代value,可以使用for value ind.values()。如果需要同事迭代key和value,可以使用for k,v in d.items()

  • 通过collections模块的Iterable类型判断是否是一个可迭代对象。isinstance(变量,Iterable),这会返回一个布尔值。

  • enumerate函数可以将一个list变成一个索引-元素树。

  • 使用列表生成器来生成有一定复杂度的list。

    >>> [x * x for x in range(1, 11)]
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    其中还可以加入if判断

    >>> [x * x for x in range(1, 11) if x % 2 == 0]
    [4, 16, 36, 64, 100]

    还可以嵌套使用

    >>> [m + n for m in 'ABC' for n in 'XYZ']
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
  • 要善于使用生成器,避免存有大量有规律的数组存在。启用方法就是将列表生成器的[]替换成()。可以通过next()函数来获取生成器的下一个返回值。generator是一个可迭代对象。直接调用返回的是一个生成器对象。

  • 可以使用yield定义generation。每次调用next()时执行generation,遇到yield语句返回,再次执行从上次返回yield处继续执行。

  • for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIterationvalue中。

  • a, b = b, a + b本质上等于a=b,同时b=a+b。先赋值,后改变a、b值。

  • 生成器是Iterator对象,而listdictstr虽然是Iterable,但不是Iterator。若想将其变成Iterator可以使用iter()函数。本质上**Iterator是一个数据流,可以被next()函数调用并不断返回下一个数据,直至抛出StopIteration错误。期间无法获知序列长度,惰性计算。**凡是可作用于for循环的对象都是Iterable类型,凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列。

  • Python的for循环本质上就是通过不断调用next()函数实现的。


文章作者: 不二
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 不二 !
 上一篇
Python函数式编程 Python函数式编程
Python函数式编程¶ 函数式编程没有变量,在确定输入时,输出就已经确定了,没有因为变量的不确定导致的副作用。允许将番薯本身作为参数传入另一个函数,允许返回一个函数。 一个函数可以接收另一个函数作为参数,称之为高阶函数。 ma
2019-07-16
下一篇 
  目录