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

How to convert a string into a parameter of a function?

我必须像这样使用日期时间减去 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']))

我该怎么做?

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

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

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

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

文档: