当前位置:   article > 正文

Python内置函数iter()、next()、关键字yield与生成器 generator_python next关键字

python next关键字

一、认识几个英文单词

  • iterable 可迭代的 性质,python 中可迭代的对象
  • iterator 迭代器,是一个对象,一次性使用,用了就消失。
  • subscriptable 可下标 即某个对象在python 里面可不可以做索引如即a[0]。

二、内置函数iter()

iter() 是迭代器的意思iterator.
函数里面输入的是一个对象,输出的是一个迭代器对象。
那么iter 可以迭代的对象有哪些呢?

  1. 列表
>>> list_a = [1,2,3]
>>> iter_a = iter(list_a)
>>> type(list_a)
<class 'list'>
>>> type(iter_a)
<class 'list_iterator'>
>>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 元组
>>> turple_b = (1,2,3)
>>> iter_b = iter(turple_b)
>>> type(turple_b)
<class 'tuple'>
>>> type(iter_b)
<class 'tuple_iterator'>
>>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 字典
d = {"a":1,"半斤地瓜烧":2}
iter_d = iter(d)
type(d)
<class 'dict'>
type(iter_d)
<class 'dict_keyiterator'>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 字符串
s = "ILOVEPYTHON"
iter_s = iter(s)
type(s)
<class 'str'>
type(iter_s)
<class 'str_iterator'>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 集合
dog = {"二哈","柯基","田园犬"}
iter_set = iter(dog)
type(dog)
<class 'set'>
type(iter_set)
<class 'set_iterator'>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 其他可迭代对象.
    因为对象有很多的,很多都可以用来迭代的。那么如何查看这个对象能不能用来做迭代器呢?
    两种方法!
    法一:对一个对象后如果找到.__iter()__这个函数,那就是一个可迭代对象
object.__iter()__
  • 1

在这里插入图片描述
并且这个函数的就是用iter(s) 得来。

s = "I love python."
iter_s1 = s.__iter__()
iter_s2 = iter(s)
# iter_s1和iter_s2是获取对象的生成器的用法是等价的
  • 1
  • 2
  • 3
  • 4

法二
对于一个对象,用内置函数isinstance()直接查看比较。

from collections import Iterable
a = []
isinstance(a,Iterable)
True
isinstance(1111111111,Iterable)
False
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

三、iter()的一次实用性和next()组合的用法

iterator 有区别于其他可序列化的对象,当读取了一次以后,就不再读取,读完之后,迭代器就停止迭代。

  • 两种读取方式
#next(object)
#object.__next__()
s = "I love python"
iter_s = iter(s)
s1 = next(iter_s)
s2 = iter_s.__next__()
print(s1,s2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

  • 迭代器不同于索引,按照顺序读取之后不能再次迭代,读取完毕后停止迭代读取。 StopIteration 异常用于标识迭代的完成。
s = "I love python"
iter_s = iter(s)
for i in range(100):
    print(iter_s.__next__())

  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

  • 不可下标读取,因为它只能是循序迭代(读取),迭代(读取)就消失了,简单地说就是
    阅完即焚,所以不支持像序列对象那种可以下标化来读取。
>>> s = "I love python"
>>> iter_s = iter(s)
>>> s[0]
'I'
>>> iter_s[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str_iterator' object is not subscriptable
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

四、生成器与关键字yield

python中,函数中有 yield 称为生成器(generator)。只能用于迭代操作,更简单点理解生成器就是一个迭代器。

def square():
    for i in range(10):
        yield i ** 2


kk = square()
print(kk.__next__())
print("for ----")
for i in kk:
    print(i)

print(type(kk))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

总结

以上就是迭代器,可迭代对象,next(),iter(),yield 关键字。的使用和区别。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/145448
推荐阅读
相关标签
  

闽ICP备14008679号