如何解决在不进行迭代的情况下调用迭代器函数时,为什么不会引发TypeError?
为了学习Python,我尝试制作一个float_range()迭代器,该迭代器模仿range()但允许浮点数。我尝试捕获错误数量的参数以引发TypeError并在下面编写了函数。
def float_range(*args):
start = 0.0
step = 1.0
if len(args) == 3:
start,end,step = args
elif len(args) == 2:
start,end = args
elif len(args) == 1:
(end,) = args
else:
raise TypeError()
n = start
if start < end:
if step > 0:
while n < end:
yield n
n += step
else:
if step < 0:
while n > end:
yield n
n += step
现在,我不明白为什么for n in float_range(1,2,3,4): print(n)
和for n in float_range(): print(n)
引发TypeError,而float_range()
和float_range(1,4)
却没有。
解决方法
如果在函数中使用yield
关键字,该函数将返回一个生成器:
print(float_range())
<generator object float_range at 0x7fe714bc2f20>
它不会返回错误,因为您尚未对其进行迭代。 for
第一次调用从函数创建的生成器对象时,它将从头开始运行函数中的代码,直到命中yield
。
在您的情况下,您没有任何参数,因此引发了TypeError
异常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。