Python中的动态关键字参数?

use*_*876 40 python

python是否有能力创建动态关键字?

例如:

qset.filter(min_price__usd__range=(min_price, max_price))
Run Code Online (Sandbox Code Playgroud)

我希望能够根据选定的货币更改usd部分.

jfs*_*jfs 47

是的,它确实.使用**kwargs在函数定义.

例:

def f(**kwargs):
    print kwargs.keys()


f(a=2, b="b")     # -> ['a', 'b']
f(**{'d'+'e': 1}) # -> ['de']
Run Code Online (Sandbox Code Playgroud)

但你为什么需要呢?

  • 谢谢,做到了.我需要这个,因为我无法访问函数本身(它是一个Django函数).所以方法本身已经在寻找**kwargs,但是我需要为要解析的方法动态创建关键字. (2认同)

Jam*_*kin 28

如果我理解你正确的要求,

qset.filter(**{
    'min_price_' + selected_currency + '_range' :
    (min_price, max_price)})
Run Code Online (Sandbox Code Playgroud)

做你需要的.


Ben*_*ack 13

您可以通过声明您的函数来轻松完成此操作:

def filter(**kwargs):
Run Code Online (Sandbox Code Playgroud)

您的函数现在将传递一个名为kwargs的字典,其中包含传递给您的函数的关键字和值.请注意,从语法上讲,这个词kwargs是没有意义的; 这**是导致动态关键字行为的原因.

你也可以反过来.如果你正在调用一个函数,并且你有一个与参数对应的字典,你可以这样做

someFunction(**theDictionary)
Run Code Online (Sandbox Code Playgroud)

还有较少使用的*foo变体,它会导致您接收一组参数.这类似于普通的C vararg数组.