使用字典更改变量的参数
Using dictionary to change the arguments of a variable
我正在尝试使用字典来更改插入到函数参数中的值。
horizon = 'YEARS'
Dict1 = {'YEARS':'weeks = 52*x','WEEKS':'weeks = x','DAYS':'days = x','HOURS': 'hours = x'}
dummy = pd.to_datetime(pd.datetime.now())
dummy2 = [dummy - timedelta(weeks=x) for x in range(1,5)]
dummy3 = [dummy - timedelta((Dict1[horizon])) for x in range(1,5)]
在这种情况下,dummy2
变量有效,但 dummy3
变量无效,因为 Dict1[horizon][0]
会给出一个字符串。
我可以用任何其他方式实现吗?
是的,您可以,利用字典解包和 lambda 函数。
Dict1 = {'YEARS': lambda a: {'weeks': 52 * a}, ...
... timedelta(**Dict1[horizon](x)) ...
这是如何工作的?
嗯,首先 Dict1['YEARS']
是 return 函数:lambda a: {'weeks': 52 * a}
。当用例如 2
调用时,将 return 一个单元素字典:{'weeks': 104}。然后,this在传递给函数时被双星(**)解包,将timedelta(**{'weeks': 104})
变成timedelta(weeks=104)
。正是我们想要的。
我正在尝试使用字典来更改插入到函数参数中的值。
horizon = 'YEARS'
Dict1 = {'YEARS':'weeks = 52*x','WEEKS':'weeks = x','DAYS':'days = x','HOURS': 'hours = x'}
dummy = pd.to_datetime(pd.datetime.now())
dummy2 = [dummy - timedelta(weeks=x) for x in range(1,5)]
dummy3 = [dummy - timedelta((Dict1[horizon])) for x in range(1,5)]
在这种情况下,dummy2
变量有效,但 dummy3
变量无效,因为 Dict1[horizon][0]
会给出一个字符串。
我可以用任何其他方式实现吗?
是的,您可以,利用字典解包和 lambda 函数。
Dict1 = {'YEARS': lambda a: {'weeks': 52 * a}, ...
... timedelta(**Dict1[horizon](x)) ...
这是如何工作的?
嗯,首先 Dict1['YEARS']
是 return 函数:lambda a: {'weeks': 52 * a}
。当用例如 2
调用时,将 return 一个单元素字典:{'weeks': 104}。然后,this在传递给函数时被双星(**)解包,将timedelta(**{'weeks': 104})
变成timedelta(weeks=104)
。正是我们想要的。