生成动态时间增量:python

2024-10-02 18:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我的情况是:

import foo, bar, etc

frequency = ["hours","days","weeks"]

class geoProcessClass():

    def __init__(self,geoTaskHandler,startDate,frequency,frequencyMultiple=1,*args):
        self.interval = self.__determineTimeDelta(frequency,frequencyMultiple)

    def __determineTimeDelta(self,frequency,frequencyMultiple):
        if frequency in frequency:
            interval = datetime.timedelta(print eval(frequency + "=" + str(frequencyMultiple)))
            return interval
        else:
            interval = datetime.timedelta("days=1")
            return interval

我想用timedelta动态定义一个时间间隔,但这似乎行不通。在

有没有什么特别的方法可以让它工作?我得到了无效的语法。在

有更好的方法吗?在


Tags: 方法importselfdatetimereturnfoodefbar
2条回答

您使用print eval(...)看起来有点过于复杂(正如您所提到的,这是错误的)。在

如果要将关键字参数传递给函数,只需执行以下操作:

interval = datetime.timedelta(frequency = str(frequencyMultiple)

但是我没有看到一个名为frequency的关键字参数,所以这可能是一个单独的问题。在

可以使用类似func(**kwargs)的语法调用带有动态参数的函数,其中kwargs是命名参数的名称/值映射字典。在

我还将global frequency列表重命名为frequencies,因为if frequency in frequency行没有什么意义。在

class geoProcessClass():
    def __init__(self, geoTaskHandler, startDate, frequency, frequencyMultiple=1, *args):
        self.interval = self.determineTimeDelta(frequency, frequencyMultiple)

    def determineTimeDelta(self, frequency, frequencyMultiple):
        frequencies = ["hours", "days", "weeks"]

        if frequency in frequencies:
            kwargs = {frequency: frequencyMultiple}
        else:
            kwargs = {"days": 1}

        return datetime.timedelta(**kwargs)

不管怎样,在文体上,人们通常不赞成默默地纠正来电者犯下的错误。如果来电者用无效的参数打电话给你,你应该立刻大声地失败,而不是试着一直咕噜咕噜地叫。我建议不要使用if语句。在

有关可变长度和关键字参数列表的详细信息,请参阅:

相关问题 更多 >