栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python--自定义range方法, for循环原理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python--自定义range方法, for循环原理

range方法其实就是一个可迭代对象

for i in range(1,10):
    print(i)

# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9

接下来我们自己来定义一个range,来模拟range方法.

先以两个参数的range方法为例

def my_range(start, end=None, step=1):
    if not end:  # 没有给end传值  my_range(10)
        end = start
        start = 0
    while start < end:
        yield start
        start += step

for i in my_range(1,100):
    print(i)

一个参数的range方法

 for i in my_range(100):
    print(i)

end 可以不传值,应该设置成默认参数, end = None

代码层面做判断,将形参数据做替换处理, end = start start = 0

三个参数的range方法

给函数添加第三个形参, 并且设置成默认参数, 默认值为1, 即step = 1

 每次递增的时候只需要递增step的数值即可.  start += step

def my_range(start, end=None, step=3):
    if not end:  # 没有给end传值  my_range(10)
        end = start
        start = 0
    while start < end:
        yield start
        start += step

for i in my_range(1,100):
    print(i)

# 1,4,7,...94,97

for循环原理

不依赖for循环, 完成对列表元素的取值

l = [11,22,33,44,55,66,77,89]
res = l.__iter__()
print(res)  # 
l = [11,22,33,44,55,66,77,89]
res = l.__iter__()
# print(res)  # 

n = 0
while n < len(l):
    print(res.__next__())
    n += 1
# 11
# 22
# 33
# 44
# 55
# 66
# 77
# 89

for循环底层原理
    for 变量名 in 可迭代对象:
        循环体代码

1.会将in后面的数据调用__iter__()变成迭代器对象
    为什么文件对象也可以for循环 因为本身就是迭代器对象 再次调用不变

2.针对产生的迭代器对象依次调用__next__()方法迭代取值

3.当值取完之后 会自动处理报错并退出循环

l = [11,22,33,44,55,66,77,89]

res = l.__iter__()
while True:
    print(res.__next__())


Traceback (most recent call last):
  File "C:/me/JetBrains/pythonProject/迭代器生成器/生成器.py", line 97, in 
    print(res.__next__())
StopIteration
11
22
33
44
55
66
77
89

 for循环本质

        结合异常处理

res = 可迭代对象.__iter__()
while True:
  try:
      print(res.__next__)
  except StopIteration as e:
    break

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942943.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号