Python迭代器是啥?

迭代器:迭代的工具。迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的。如计算机中的迭代开发,就是基于软件的上一个版本更新。以下代码就不是迭代,它只是单纯的重复

while True:
    print('*'*10)

一、可迭代对象

python中一切皆对象,如

x = 1
name = 'nick'
lis = [1, 2]
tup = (1, 2)
dic = {'name': 'nick'}
s1 = {'a', 'b'}


def func():
    pass


f = open('49w.txt', 'w', encoding='utf-8)

对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象。

# x = 1.__iter__  # SyntaxError: invalid syntax

# 以下都是可迭代的对象

name = 'nick'.__iter__
lis = [1, 2].__iter__
tup = (1, 2).__iter__
dic = {'name': 'nick'}.__iter__
s1 = {'a', 'b'}.__iter__
f = open('49w.txt', 'w', encoding='utf-8')
f.__iter__
f.close()

总结

可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象。

特点:

内置有__iter__方法的都叫可迭代的对象。

二、迭代器对象

只有字符串和列表都是依赖索引取值的,而其他的可迭代对象都是无法依赖索引取值的。因此我们得找到一个方法能让其他的可迭代对象不依赖索引取值。

在找到该方法前,首先我们给出迭代器对象的概念:可迭代的对象执行__iter__方法得到的返回值。并且可迭代对象会有一个__next__方法。

  • 不依赖索引的数据类型迭代取值
dic = {'a': 1, 'b': 2, 'c': 3}
iter_dic = dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
# print(iter_dic.__next__())  # StopIteration:

输出

a
b
c
  • 依赖索引的数据类型迭代取值
lis = [1, 2, 3]
iter_lis = lis.__iter__()
print(iter_lis.__next__())
print(iter_lis.__next__())
print(iter_lis.__next__())
# print(iter_lis.__next__())  # StopIteration:

输出

1
2
3

上述的方法是非常繁琐的,我们可以使用while循环精简下。
其中使用的try...except...为异常处理模块,以后会详细讲解。

s = 'hello'
iter_s = s.__iter__()
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:489111204 
while True:
    try:
        print(iter_s.__next__())
    except StopIteration:
        break

输出

h
e
l
l
o

总结

迭代器对象:执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象。

特点:

  • 内置__next__方法,执行该方法会拿到迭代器对象中的一个值
  • 内置有__iter__方法,执行该方法会拿到迭代器本身
  • 文件本身就是迭代器对象。

缺点:

  • 取值麻烦,只能一个一个取,并且只能往后取,值取了就没了
  • 无法使用len()方法获取长度

三、for循环原理

for循环称为迭代器循环,in后必须是可迭代的对象。

lis = [1, 2, 3]
for i in lis:
    print(i)

输出

1
2
3

因为迭代器使用__iter__后还是迭代器本身,因此for循环不用考虑in后的对象是可迭代对象还是迭代器对象。

由于对可迭代对象使用__iter__方法后变成一个迭代器对象,这个迭代器对象只是占用了一小块内存空间,他只有使用__next__后才会吐出一个一个值。如lis = [1,2,3,4,5,...]相当于一个一个鸡蛋,而lis = [1,2,3,4,5,...].__iter__相当于一只老母鸡,如果你需要蛋,只需要__next__即可。

print(range(10))  # range(0, 10)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python迭代器是啥? - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • Python学习:定义函数的默认参数和可变参数

    一、默认参数 定义函数的时候,还可以有默认参数。 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int(‘123’) 123 >>> int(‘123’, 8) 83 int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,…

    Python开发 2023年4月2日
    00
  • python3教程:*和**的打包和解包的用法

    一. 打包参数 1. * 的作用:在函数定义中,收集所有的位置参数到一个新的元组,并将这个元组赋值给变量args >>> def f(*args): print(args) >>> f() () >>> f(1) (1,) >>> f(1, 2, 3, 4) (1, 2, 3, 4) &…

    Python开发 2023年4月2日
    00
  • python3实现字符串的全排列的方法(无重复字符)两种解决方法

    抛出问题 求任意一个字符串的全排列组合,例如a=’123′,输出 123,132,213,231,312,321。(暂时假定字符串没有重复) 解决方案 目前有两种解决的方法 方法一: def str_sort(s=”): if len(s) <= 1: return [s] str_list = [] for i in range(len(s)): …

    Python开发 2023年3月31日
    00
  • python中主要的英语单词汇总

    path [ pɑ:θ ] 路径 unexpected [ˌʌnɪkˈspektɪd] 不期望的 class [klɑ:s] 类 usage [ˈju:sɪdʒ] 使用 public [‘p ʌblik] 公共的,公用的 version [ˈvɜ:ʃn] 版本 private [‘praivit] 私有的,私人的 author [ˈɔ:θə®] 作者 sta…

    Python开发 2023年4月2日
    00
  • Python中高阶函数与装饰器教程

    1高阶函数 1.1 数学概念 回顾下数学知识: y=f(x) 这是最开始接触的普通函数 y=g(f(x)) 这个就是我们接触到的高阶函数 在数学和计算机科学中,高阶函数至少应当是满足下面一个条件的函数: 1)接受一个或者多个函数作为参数 2)输出一个函数 程序中我们的高阶函数也类似 示例计数器的函数: def counter(base): def inc(s…

    Python开发 2023年3月31日
    00
  • python返回多个值与赋值多个值

    一、总结 一句话总结: 返回多个值:def min_max(list1): return min(list1),max(list1) 赋值多个值:min1,max1=min_max([1,3,5]) 1、b,=tuple2 怎么理解? 当tuple2是元组或者列表,并且里面只有一个元素的时候,这样变量b可以取得这个tuple2里面的元素,而不是tuple2本…

    Python开发 2023年4月2日
    00
  • Python模块:subprocess模块教程

    一.subprocess模块 subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码。这个模块的目的在于替换几个旧的模块和方法,如: os.system os.spawn* 1.subprocess模块中的常用函数 函数 描述 subprocess…

    Python开发 2023年4月2日
    00
  • Python教程:selenium模块用法教程

    1.介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器 from selenium import webdriver browser=webd…

    Python开发 2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部