问题描述
为了学习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
异常。