生成动态时间delta:python

Geo*_*lva 2 python datetime eval timedelta

这是我的情况:

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
Run Code Online (Sandbox Code Playgroud)

我想动态定义一个时间间隔timedelta,但这似乎不起作用.

有没有具体的方法来使这项工作?我在这里得到了无效的语法.

有没有更好的方法呢?

Joh*_*ica 6

您可以使用语法来调用具有动态参数的函数,例如func(**kwargs)where kwargs是命名参数的名称/值映射的字典.

我还将全局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)
Run Code Online (Sandbox Code Playgroud)

对于它的价值而言,风格上通常不赞成无声地纠正来电者所犯的错误.如果调用者用无效的参数调用你,你可能应该立即大声地失败,而不是试图继续使用.我建议不要这样if说.

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