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)
但你为什么需要呢?
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数组.