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

  • 相关阅读:
    系统安全方案
    模态框的使用
    thinkphp修改分页为post方式
    手动配置apache、php
    Djang之ModelForm组件的简单使用
    连接池还是连接迟?
    金融量化
    luasocket编译安装遇到的坑
    numpy&pandas补充常用示例
    Matplotlib画正弦余弦曲线
  • 原文地址:https://www.cnblogs.com/gaowy/p/9732857.html
Copyright © 2011-2022 走看看