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

Lun*_*ahl 3 python python-2.7

我使用的dateutil.relativedelta()time_unit在我的age-tuple和代码中对应的命名参数,以获得相对时间的样子:

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

在Python 2.7中是否有任何方法可以使用以下内容:

relative_time = now - relativedelta(eval("eval('age.time_unit') +'=' +age.value"))
Run Code Online (Sandbox Code Playgroud)

以上不起作用.我是不是坚持了,if/elif或者我能做些什么更好的事情吗?

Igo*_*kiy 5

def time_delta(age):
    now = datetime.fromtimestamp(int(time.time()))
    return now - relativedelta(**{age.time_unit: int(age.value)})
Run Code Online (Sandbox Code Playgroud)

(代码未经过测试,但应该可以使用)