【问题标题】:How to convert a string into a parameter of a function?如何将字符串转换为函数的参数?
【发布时间】:2022-01-13 21:58:58
【问题描述】:

我必须像这样使用 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']))

我该怎么做?

【问题讨论】:

    标签: python string function parameters


    【解决方案1】:

    您可以使用字典解包运算符** 将字典展开为关键字参数,因此您只需先制作字典。

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

    文档:

    【讨论】:

      【解决方案2】:

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

      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

      【讨论】:

      • 您不需要重复使用名称period,实际上我建议不要使用它以避免混淆。