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'] 但是你为什么需要它呢

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']
但是你为什么需要它呢?

是的,有点。 在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,但我需要动态创建要解析的方法的关键字。请参阅