在方法中返回值的正确方法是什么?在python中

时间:2015-07-01 16:22:12

标签: python object

此函数生成一系列日期(此函数与某个类相关):

def _makeRangeDates(self, desde, ultima_carga):
    dates = []
    for fechaRequest in rrule(DAILY, dtstart=desde, until=ultima_carga):
        dates.append(fechaRequest)
    return self.dates

返回此函数内日期列表的最佳方法是什么?

是必须返回self.dates吗?

的问候。 纳尔逊。

4 个答案:

答案 0 :(得分:2)

您无法在此处返回self.dates。您将日期附加在dates变量中,并且应该在方法内返回。在您的情况下,self.dates可能甚至不存在。

编辑:我认为这是您要实施的目标

class abc():
    def __init__(self):
        self.dates = []

    def _makeRangeDates(self,desde,ultima_carga):
        for fechaRequest in rrule(DAILY, dtstart=desde, until=ultima_carga):
            self.dates.append(fechaRequest)
        return self.dates

答案 1 :(得分:1)

我假设您已经在某种类foo中拥有此功能,如此:

class foo(object):
    def __init__(self):
        self.dates = []

    def _makeRangeDates(self,desde,ultima_carga):
        dates = []
        for fechaRequest in rrule(DAILY, dtstart=desde, until=ultima_carga):
            dates.append(fechaRequest)
        return self.dates

在这种情况下,返回datesself.dates是完全不同的两件事。由于dates是在_makeRangeDates函数内创建的,因此在调用函数后很快就会收集垃圾。如果您希望仅返回dates而不是将其保存在某个州,那么那就完美了。

如果您希望保存dates的状态,请执行以下操作:

class foo(object):
    def __init__(self):
        self.dates = []

    def _makeRangeDates(self,desde,ultima_carga):

        for fechaRequest in rrule(DAILY, dtstart=desde, until=ultima_carga):
            self.dates.append(fechaRequest)
        return self.dates

答案 2 :(得分:1)

您混淆了本地变量和数据成员。并且 _makeRangeDates甚至不是一种方法,只是一个函数,因为它不会读取或写入对象(您永远不会使用self参数) 。

dates只是您在函数中创建的一些局部变量:

dates = []
    for fechaRequest in rrule(DAILY, dtstart=desde, until=ultima_carga):
        dates.append(fechaRequest)

dates不是数据成员,即它不是self.dates

如果您只想要一个返回该结果的函数,那么return dates。 该函数可以站在类层次结构之外。

如果你想在类中放置一个这样的辅助函数,但实际上根本没有访问该对象,那么这种函数称为 staticmethod / classmethod (建议你读到了两者之间的区别。)

答案 3 :(得分:0)

dates变量和self.dates变量是两个不同的变量(除非你做了一些赋值,例如self.date = date,在这个赋值之后它们都指的是同一个对象(但仍然是指向相同参考的不同名称/变量。)

是的,你可以返回任何一个python不应该抱怨(除非你试图返回一个尚未定义/初始化的变量,就像你在你的例子中所做的那样)

在您的示例中,您正在创建dates变量并为其添加值,但最后您将返回self.dates(这可能会导致问题,因为self.dates可能尚未定义该函数被调用)。

我相信你想从你的函数返回dates,因为那是你在函数中定义的变量,你追加日期。