定义我自己的返回列表的范围函数

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

【讨论】:

以上是关于定义我自己的返回列表的范围函数的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:错误:42601:返回“记录”的函数需要列定义列表

函数定义:从整数列表中返回偶数列表

R用户定义函数,返回多个类型对象

python dir()详解

Python_函数术语列表

Python_函数术语列表