python是否有能力创建动态关键字?Python中的动态关键字参数?
例如:
qset.filter(min_price__usd__range=(min_price, max_price))
我希望能够根据选定的货币来改变美元一部分。
python是否有能力创建动态关键字?Python中的动态关键字参数?
例如:
qset.filter(min_price__usd__range=(min_price, max_price))
我希望能够根据选定的货币来改变美元一部分。
是的,它的确如此。在函数定义中使用**kwargs
。
例子:
def f(**kwargs):
print kwargs.keys()
f(a=2, b="b") # -> ['a', 'b']
f(**{'d'+'e': 1}) # -> ['de']
但是,为什么你需要吗?
谢谢,它做到了。 我需要这个,因为我没有访问函数本身(这是一个Django函数)。所以这个方法本身已经在寻找** kwargs,但是我需要为解析的方法动态地创建关键字。 – user42876 2008-12-03 16:36:55
是的,有点。 在您的过滤器方法中,您可以声明收集所有未知的通配符变量keyword arguments。你的方法可能是这样的:
def filter(self, **kwargs):
for key,value in kwargs:
if key.startswith('min_price__') and key.endswith('__range'):
currency = key.replace('min_price__', '').replace('__range','')
rate = self.current_conversion_rates[currency]
self.setCurrencyRange(value[0]*rate, value[1]*rate)
谢谢,但不幸的是我没有访问函数本身(这是一个Django函数)。所以这个方法本身已经在寻找** kwargs,但是我需要为解析的方法动态地创建关键字。 – user42876 2008-12-03 16:28:19
您可以轻松地做到这一点通过声明你这样的功能:
def filter(**kwargs):
的功能现在将通过一个名为kwargs字典包含通过关键字和值到你的功能。请注意,在句法上,单词kwargs
是没有意义的; **
是导致动态关键字行为的原因。
你也可以做相反的事情。如果你调用一个函数,你必须对应于参数的字典,你可以做
someFunction(**theDictionary)
还有一个较少使用的* foo的变种,这导致您收到的参数数组。这与正常的C可变参数阵列相似。
如果我理解你的要求正确,
qset.filter(**{
'min_price_' + selected_currency + '_range' :
(min_price, max_price)})
做你所需要的。
正是我需要的!谢谢。 – 2016-05-07 19:29:39
请参阅http://stackoverflow.com/questions/310732/in-django-how-does-one-filter-a-queryset-with-dynamic-field-lookups – 2008-12-03 17:56:14