• 生成器与迭代器


    容器(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

  • 相关阅读:
    MySQL管理
    MySQL触发器
    板块龙头与行业龙头
    货币宽松结束
    调整
    职业操盘手不传之秘:识别平台突破的技巧原则详解---赶牛寻渔
    chan
    2017板块轮动参考
    各种建筑风格及其代表建筑
    3分钟看懂各种建筑结构优劣
  • 原文地址:https://www.cnblogs.com/gaowy/p/9732857.html
Copyright © 2020-2023  润新知