python中for循环的用法_python中的for循环

b6b2a735e1a7e768ae17f5635a733e5b.png

我们今天来简单的来说一下Python的 for 循环,在说之前,我们首先要有一个概念:在Python中是万物皆对象的

我们先用Python来写一个简单的for循环。

# 循环输出列表中的每个元素 
arr_list = [1,2,3,4,5,6,7,8,9,10]
for num in arr_list:
    print(num)

这样我们就写出了一个最简单的 for 循环,目测很简单,但是细思极恐。

824943232680f94529740ecaa6912b4f.png

我们可以来思考几个问题:

  • python 如何判断 for 循环结束。
  • python 是如何进行的循环 。
  • 在python中,什么对象可以进行 for 循环操作。

在python中万物皆对象,所以列表(list)也是一个对象。在python中,可迭代对象都可以支持for 循环。那么问题来了,什么是可迭代对象?答案是:调用了迭代器的对象称之为可迭代对象

迭代器

什么是迭代器,迭代器是指一个对象实现了 __iter __和 __next__ 方法并且可以被 for 循环就可以称之为迭代器了。咱们来敲一段代码。

class NumsIter:
    def __init__(self,num):
        """
        构造函数传递一个 num 进来
        :param num:
        """
        self.num = num # 循环截至的条件
        self.count = 0 # 循环开始的值

    def __iter__(self):
        """
        返回一个 迭代器,这里就直接返回这个对象本身
        :return:
        """
        return self

    def __next__(self):
        """
        每一次for 循环调用一次 返回一个值
        :return: 
        """
        res = self.count
        if self.count == self.num: # 如果 count == num 我们就抛出一个StopIteration 异常
            self.count = 0 # 循环结束 重新初始化 count
            raise StopIteration # 抛出StopIteration 结束循环。

        self.count += 1 # 没被for 循环调用一次 count 就加 1
        return res


if __name__ == "__main__":
    for i in NumsIter(10):
        print(i)

    # 输出
    """
0
1
2
3
4
5
6
7
8
9
   """

首先,一个迭代器的一个特征是实现了 __iter__ 方法 和 __next__ 方法 ,其中 __iter__ 会返回一个迭代器,一般这个方法都返回自己(self)。
在每次循环都会调用 __next_ 方法,__next_ 方法会返回一个值或一组值,这个值就是我们for i in arr__list 中的 i
每次都返回一个值,什么时候停止呢,这个由我们自己决定当循环需要结束时我们只需要抛出一个 StopIteration 循环就结束了。
通过上述代码我们可以看到迭代器具有一个特点就是惰性求值,每一次循环的值,我们都是算出来的,并不是我事先存储起来的。一般for循环计算大量有规律的数据时,我们可以使用迭代器,这样可以减少内存的占用。

总结:

  1. 实现了迭代器的对象称之为可迭代对象,但一般可迭代对象都是容器,即起到了存储数据的作用。一个可迭代对象可能就是一个迭代器。
  2. 一个标准的迭代器具有的特点:
    (1) 实现了 __iter__ 方法__next__ 方法 。
    (2) 迭代器 具有惰性求值的特点。
    (3) __next__ 方法中会抛出 StopIteration 异常用于结束 for 循环。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值