Python高级特性

Posted bwon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python高级特性相关的知识,希望对你有一定的参考价值。

切片(tuple)

有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。

  • 操作对象:list、tuple、str;替代了其他语言的截取函数,如substring()
  • 应用场景:对经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。
  • 使用方法:如Mylist[0:5]表示,从索引0开始,直到索引5为止;但不包括索引5,即索引0,1,2,3,4,正好5个元素。如果第一个索引是0还可以省略,如Mylist[:];还支持步长,如每两个取一个Mylist[::2]

迭代(Iterable)

  • 定义:给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)
  • 场景:任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。
  • 判断:使用函数isinstance(object,Iterable)判断结果反馈True为可迭代、返回False为不可迭代。
  • 语法:迭代元素for var in IterObject,下标方式迭代for i,value in enumerate(object)

列表生成式(list generator)

  • 定义:运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。
  • 语法:如newList = [x*x for x in oldList if x % 2 == 0]解释为用oldList列表中偶数元素的平方生成一个新列表newList。

生成器(generator)

  • 定义:在Python中,一边循环一边计算的机制,称为生成器:generator。
  • 原理:generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
  • 创建方法:
    • 创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
    • 用函数构建,内部使用yield关键字
  • 区别:
    • 空间区别:列表生成式,是一次性重建出所有元素,并开辟内存空间;生成器是按照某种算法推算出需要的元素,能够节省大量空间。
    • 函数区别:普通函数顺序执行,遇到return或最后一行语句返回。generator函数,每次调用next()时候执行,遇到yield语句返回,再执行时从上次返回的yield处继续执行。
  • 语法:g = (x * x for x in range(10))或者如下所示:
def fib(max):
 n, a, b = 0, 0, 1
 while n < max:
     print(b)
     a, b = b, a + b
     n = n + 1
 return 'done'

迭代器(Iterator)

  • 定义:
    可以直接使用for循环的数据类型如下:
    • 集合数据类型:如list tuple dict set str
    • generator类型:包括生成器和带yield的generator function
      以上可以直接作用于for循环的对象统称为可迭代对象:Iterable
  • 判断:是否是Iterable对象,可以被next()函数调用并不断返回下一值得对象称为迭代器,可以用函数isinstance(object,Iterable)判断。
  • 转换:生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator,把list、dict、strIterable变成Iterator可以使用iter()函数。
  • 理解:为什么list、dict、str等数据类型不是Iterator
    这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的

以上是关于Python高级特性的主要内容,如果未能解决你的问题,请参考以下文章

python - 高级特性

Python3 高级特性

python高级特性-切片

python之高级特性

python高级特性

Python的高级特性(切片,迭代,生成器,迭代器)