理解 *args 和 **kwargs

问题描述

我正在尝试习惯在 python 函数中使用 *args 和 **kwargs,但我很难适应它。

例如:

def foo(a,b,*args):
   print(a)
   print(b)
   if args1 == True:
      print(args2)
   else:
      print(a+args1)

所以如果我运行它

foo('one','two')

我希望它打印 'one''two', 但如果我跑

foo('one','two',True,'three')

我想得到 'one''two''three', 而作为

foo('one','three')

我想得到 'one','onethree'

我怎样才能实现它?

解决方法

参数

定义:

def foo1(a,b,*args):
   print(a)
   print(b)
   if args:
      for arg in args:
          print(arg)

用法:

foo1(1,2,3,4)
foo1(1,*[3,4])

kwargs

定义:

def foo2(a,**kwargs):
   print(a)
   print(b)
   if kwargs:
      for k,v in kwargs.items():
          print(f'{k}: {v}')

用法:

foo2(1,c=3,d=4)
foo2(1,**{'c':3,'d':4})
,
  def foo(a,*args):
    print(a)
    print(b)
    if args and args[0]==True:
        print(args[0])
    else:
        print(a+args[0])

foo('one','two','three')

one
two
onethree