将表达式作为命名参数nam传递

2024-05-15 11:23:48 发布

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

我使用的是dateutil.relativedelta(),它在我的age-元组中有与time_unit相对应的命名参数,得到相对时间的代码如下所示:

def time_delta(age):
    now = datetime.fromtimestamp(int(time.time()))
    if age.time_unit == "seconds":
        relative_time = now - relativedelta(seconds=int(age.value))
    elif age.time_unit == "minutes":
        relative_time = now - relativedelta(minutes=int(age.value))
    elif age.time_unit == "hours":
        relative_time = now - relativedelta(hours=int(age.value))
    elif age.time_unit == "days":
        relative_time = now - relativedelta(days=int(age.value))
    elif age.time_unit == "weeks":
        relative_time = now - relativedelta(weeks=int(age.value))
    elif age.time_unit == "months":
        relative_time = now - relativedelta(months=int(age.value))
    elif age.time_unit == "years":
        relative_time = now - relativedelta(years=int(age.value))

在Python2.7中,有没有什么方法可以让它成为一个单行线,而不是使用以下代码:

^{pr2}$

上面没用。我是坚持使用if/elif还是有更好的方法可以做?在


Tags: 代码ageiftimevalueunitdaysnow
2条回答
def time_delta(age):
    now = datetime.fromtimestamp(int(time.time()))
    return now - relativedelta(**{age.time_unit: int(age.value)})

(代码没有测试,但可能会起作用)

def time_delta(age):
    now = datetime.fromtimestamp(int(time.time()))
    if age.time_unit in ["seconds","minutes","hours","days","weeks","months","years"]:
        exec("relative_time = now - relativedelta({}=int(age.value))".format(age.time_unit))

我知道,我知道。exec!!!在这种模式下很安全,伙计们。在

编辑:打字错误。exec,而不是{}

相关问题 更多 >