python是否有能力创建动态关键字?
例如:
qset.filter(min_price__usd__range=(min_price, max_price))
我希望能够根据选定的货币更改usd部分.
是的,它确实.使用**kwargs
在函数定义.
例:
def f(**kwargs): print kwargs.keys() f(a=2, b="b") # -> ['a', 'b'] f(**{'d'+'e': 1}) # -> ['de']
但你为什么需要呢?
如果我理解你正确的要求,
qset.filter(**{ 'min_price_' + selected_currency + '_range' : (min_price, max_price)})
做你需要的.
您可以通过声明您的函数来轻松完成此操作:
def filter(**kwargs):
您的函数现在将传递一个名为kwargs的字典,其中包含传递给您的函数的关键字和值.请注意,从语法上讲,这个词kwargs
是没有意义的; 这**
是导致动态关键字行为的原因.
你也可以反过来.如果你正在调用一个函数,并且你有一个与参数对应的字典,你可以这样做
someFunction(**theDictionary)
还有较少使用的*foo变体,它会导致您接收一组参数.这类似于普通的C vararg数组.