定义我自己的返回列表的范围函数
Posted
技术标签:
【中文标题】定义我自己的返回列表的范围函数【英文标题】:Defining my own range function that returns a list 【发布时间】:2019-10-28 21:35:17 【问题描述】:如果有人知道如何做到这一点,我正在尝试摆脱这个 yield 和 '%g' 语句并用 return 语句替换它。除此之外,我正在尝试使它真正像函数一样工作,您可以将变量传递给它并将范围作为列表获取,但我也不知道该怎么做。任何帮助,将不胜感激。我对这个很迷茫。
代码应该充当范围函数,但返回一个列表。
def myRange(start, stop=None, step=None):
if stop == None:
stop = start
if step == None:
step = 1
while True:
if step > 0 and start >= stop:
break
elif step < 0 and start <= stop:
break
yield ("%g" % start)
start = start + step
lyst = myRange(0.5, 1.0, 0.1)
for num in lyst:
print (num)
【问题讨论】:
首先,你为什么不append
将项目添加到列表中而不是让它们生成?无论如何,您为什么要字符串格式 数字?最后,为什么不只是return list(range(start, stop, step))
?
我应该怎么做而不是字符串格式?我想摆脱整个 yield 代码行。
既然你想要一个列表——为什么不建立一个呢?既然您不想对数字进行字符串格式化——为什么不按原样使用数字呢?
我收到此错误 - TypeError: 'NoneType' object is not iterable - 当我删除代码行时。以及我需要摆脱 - lyst = myRange(0.5, 1.0, 0.1) for num in lyst: print (num)
您必须替换该行,而不是删除它。你知道如何追加到列表吗?
【参考方案1】:
不要使用yield
,只需创建一个变量来保存结果列表并不断添加:
lst = []
while True:
if step > 0 and start >= stop:
break
elif step < 0 and start <= stop:
break
lst.append("%g" % start)
start += step
return lst
【讨论】:
以上是关于定义我自己的返回列表的范围函数的主要内容,如果未能解决你的问题,请参考以下文章