zoukankan      html  css  js  c++  java
  • 生成器与迭代器

    容器(container)

    容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用innot in关键字判断元素是否包含在容器中。通常这类数据结构把所有的元素存储在内存中(特殊情况除外,比如迭代器和生成器对象)在Python中,常见的容器对象有:

    • list, deque, ....
    • set, frozensets, ....
    • dict, defaultdict, OrderedDict, Counter, ....
    • tuple, namedtuple, …
    • str

    容器比较容易理解,因为你就可以把它看作是一个盒子、一栋房子、一个柜子,里面可以塞任何东西。从技术角度来说,当它可以用来询问某个元素是否包含在其中时,那么这个对象就可以认为是一个容器,比如 list,set,tuples都是容器对象:

    1 1 in [1, 2, 3]      # lists
    2 4 not in [1, 2, 3]
    3 1 in {1, 2, 3}      # sets
    4 4 not in {1, 2, 3}
    5 1 in (1, 2, 3)      # tuples
    6 4 not in (1, 2, 3)

    判断元素的key是否存在

    1 d = {1: 'foo', 2: 'bar', 3: 'qux'}
    2 print('foo' in d) #False
    3 print(1 in d)     #True

    判断一个字符串是否在另一个字符串中

    1 s = 'foobar'
    2 print('ob' in s) #True

    尽管绝大多数容器都提供了某种方式来获取其中的每一个元素,但这并不是容器本身提供的能力,而是可迭代对象赋予了容器这种能力

    可迭代对象(iterable)

    很多容器都是可迭代对象,此外还有很多的对象同样也是可迭代对象,比如处于打开状态的files

    可以返回一个迭代器对象的都可称之为可迭代对象

    1 x = [1, 2, 3]
    2 y = iter(x)
    3 z = iter(x)
    4 next(y) #1
    5 next(y) #2
    6 next(z) #1
    7 type(x) #<class 'list'>
    8 type(y) #<class 'list_iterator'>

    这里x是可迭代对象,y、z是两个独立的迭代器

    迭代器

    迭代器是一个带状态的对象,从第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

    生成器

    在 Python 中,使用了 yield 的函数被称为生成器(generator)。

    只有在调用时才会生成相应数据

    只记录当前位置

    只有一个next()方法

    生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

    本文转自:https://foofish.net/iterators-vs-generators.html

  • 相关阅读:
    Maven中的依赖相关总结
    Redis(序)应用场景
    Java并发专栏(一)—— Process vs Thread
    Java中转换为二进制的几种实现
    Java中转换为十六进制的几种实现
    oracle日期格式和java日期格式区别 HH24:mm:ss和HH24:mi:ss的区别
    远程教学的一些准备
    将latex的beamer做的幻灯片转换为ppt格式后的一些问题
    最近看过的雨课堂和智慧树的笔记
    关于在线授课的探索
  • 原文地址:https://www.cnblogs.com/gaowy/p/9732857.html
Copyright © 2011-2022 走看看