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,但这似乎不起作用.
有没有具体的方法来使这项工作?我在这里得到了无效的语法.
有没有更好的方法呢?
您可以使用语法来调用具有动态参数的函数,例如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说.
有关可变长度和关键字参数列表的更多信息,请参阅:
| 归档时间: |
|
| 查看次数: |
2026 次 |
| 最近记录: |