Python&Django:**是什么意思

Emm*_*ali 0 python django django-rest-framework

可能我知道**的以下用途

力量

x ** y # x power y equivalent to pow(x,y)
Run Code Online (Sandbox Code Playgroud)

传递不定数量的参数

def sample(x, **other):
    print(x, other.keys)
sample(x=2,y=3,z=4) 
Run Code Online (Sandbox Code Playgroud)

但我不明白它何时用作以下(在序列化器中)

def create(self, validated_data):
    return Comment(**validated_data)
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我那里发生了什么吗

blu*_*ote 5

这与你的第二个例子相反。在函数定义中时,**运算符会收集所有命名参数并创建一个字典。调用函数时,它需要一个字典并将其分解为命名参数

所以,如果你有

values = {'x': 1, 'y': 2}
f(**values)
Run Code Online (Sandbox Code Playgroud)

它相当于

f(x=1, y=2)
Run Code Online (Sandbox Code Playgroud)