Python中的动态关键字参数?
python是否能够创建动态关键字 例如:Python中的动态关键字参数?,python,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'] 但是你为什么需要它呢
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']
但是你为什么需要它呢?是的,有点。
在filter方法中,可以声明一个通配符变量来收集所有未知变量。您的方法可能如下所示:
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)
def filter(**kwargs):
您可以通过如下方式声明函数来轻松实现这一点:
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)
def filter(**kwargs):
现在将向函数传递一个名为kwargs的字典,其中包含传递给函数的关键字和值。注意,在句法上,kwargs
一词没有意义;**
是导致动态关键字行为的原因
你也可以做相反的事情。如果您正在调用一个函数,并且您有一个与参数对应的字典,那么您可以这样做
someFunction(**theDictionary)
还有一个使用较少的*foo变量,它使您收到一个参数数组。这类似于普通的C vararg数组。如果我正确理解您的要求
qset.filter(**{
'min_price_' + selected_currency + '_range' :
(min_price, max_price)})
做您需要的。谢谢,但不幸的是,我无法访问该函数本身(它是Django函数)。因此,该方法本身已经在寻找**kwargs,但我需要动态创建要解析的方法的关键字。谢谢,这样做了。我之所以需要它,是因为我无法访问函数本身(它是一个Django函数)。因此,该方法本身已经在寻找**kwargs,但我需要动态创建要解析的方法的关键字。请参阅