代码之家  ›  专栏  ›  技术社区  ›  Davi A. Sampaio

如何将字符串转换为函数的参数?

  •  1
  • Davi A. Sampaio  · 技术社区  · 3 年前

    我必须用datetime减去2个日期,如下所示:

    datetime.datetime.now() - datetime.timedelta(minutes=15)
    # subtracting 15 minutes
    

    问题是我不一定要减去分钟。 我有一本字典,告诉我应该减去什么。

    period = {'quantity': '15', 'time': 'minutes'}
    

    if period['time'] == 'minutes':
        tempo_atras = datetime.datetime.now() -datetime.timedelta(minutes=int(period['quantity']))
    elif period['time'] == 'hours':
        tempo_atras = datetime.datetime.now() - datetime.timedelta(hours=int(period['quantity']))
    elif period['time'] == 'days':
        tempo_atras = datetime.datetime.now() - datetime.timedelta(days=int(period['quantity']))
    elif period['time'] == 'weeks':
        tempo_atras = datetime.datetime.now() - datetime.timedelta(weeks=int(period['quantity']))
    

    我觉得我写它的方式不干净,所以我需要一种方法来转换 period['time'] 函数参数中的字符串;比如:

    tempo_atras = datetime.datetime.now() - datetime.timedelta(period['time']=int(period['quantity']))
    

    我该怎么做?

    2 回复  |  直到 3 年前
        1
  •  2
  •   wjandrea senderle    3 年前

    您可以使用字典解包操作符 ** 要将dict扩展为关键字参数,只需首先生成dict。

    q = {period['time']: int(period['quantity'])}
    tempo_atras = datetime.datetime.now() - datetime.timedelta(**q)
    

    文件:

        2
  •  2
  •   wjandrea senderle    3 年前

    您必须转换字典,使句点指向数量。然后正常使用字典解包。

    import datetime
    period = {'quantity': '15', 'time': 'minutes'}
    # convert the dictionary to a dictionary of "minutes"= "15"
    period = {period['time']: int(period['quantity'])}
    print(period)
    tempo_atras = datetime.datetime.now() - datetime.timedelta(**period)
    

    注意:您可以阅读有关此格式的更多信息(以及 * More on Defining Functions