Default arguments with *args and **kwargs

前端 未结 7 1298
刺人心
刺人心 2020-11-27 12:12

In Python 2.x (I use 2.7), which is the proper way to use default arguments with *args and **kwargs?
I\'ve found a question on

7条回答
  •  感动是毒
    2020-11-27 12:50

    Similar approach to @yaccob, but clear and concise:

    In Python 3.5 or greater:

    def foo(a, b=3, *args, **kwargs):
      defaultKwargs = { 'c': 10, 'd': 12 }
      kwargs = { **defaultKwargs, **kwargs }
      print(a, b, args, kwargs)
      
      # Do something    
    
    foo(1) # 1 3 () {'c': 10, 'd': 12}
    foo(1, d=5) # 1 3 () {'c': 10, 'd': 5}
    foo(1, 2, 4, d=5) # 1 2 (4,) {'c': 10, 'd': 5}
    

    Note: you can use In Python 2

    kwargs = merge_two_dicts(defaultKwargs, kwargs)
    

    In Python 3.5

    kwargs = { **defaultKwargs, **kwargs }
    

    In Python 3.9

    kwargs = defaultKwargs | kwargs  # NOTE: 3.9+ ONLY
    

提交回复
热议问题