What is the purpose and use of **kwargs?

前端 未结 13 2191
伪装坚强ぢ
伪装坚强ぢ 2020-11-21 04:59

What are the uses for **kwargs in Python?

I know you can do an objects.filter on a table and pass in a **kwargs argument. &nbs

13条回答
  •  独厮守ぢ
    2020-11-21 05:39

    On the basis that a good sample is sometimes better than a long discourse I will write two functions using all python variable argument passing facilities (both positional and named arguments). You should easily be able to see what it does by yourself:

    def f(a = 0, *args, **kwargs):
        print("Received by f(a, *args, **kwargs)")
        print("=> f(a=%s, args=%s, kwargs=%s" % (a, args, kwargs))
        print("Calling g(10, 11, 12, *args, d = 13, e = 14, **kwargs)")
        g(10, 11, 12, *args, d = 13, e = 14, **kwargs)
    
    def g(f, g = 0, *args, **kwargs):
        print("Received by g(f, g = 0, *args, **kwargs)")
        print("=> g(f=%s, g=%s, args=%s, kwargs=%s)" % (f, g, args, kwargs))
    
    print("Calling f(1, 2, 3, 4, b = 5, c = 6)")
    f(1, 2, 3, 4, b = 5, c = 6)
    

    And here is the output:

    Calling f(1, 2, 3, 4, b = 5, c = 6)
    Received by f(a, *args, **kwargs) 
    => f(a=1, args=(2, 3, 4), kwargs={'c': 6, 'b': 5}
    Calling g(10, 11, 12, *args, d = 13, e = 14, **kwargs)
    Received by g(f, g = 0, *args, **kwargs)
    => g(f=10, g=11, args=(12, 2, 3, 4), kwargs={'c': 6, 'b': 5, 'e': 14, 'd': 13})
    

提交回复
热议问题