zl程序教程

您现在的位置是:首页 >  后端

当前栏目

奥利给!10个Python 示例,轻松学会 *args 和 **kwargs

Python 10 示例 轻松 学会 args
2023-09-14 09:06:06 时间

我们知道函数是 Python 代码编程的基础。它可以接受零个或多个参数并返回值。函数参数传递非常灵活。 *args 和 **kwargs 可以处理参数变得更容易、更简洁。

*args 和 **kwargs 虽然功能强大,但能真正掌握的同学其实并不多。在这篇文章中,我将分享十个示例,让你轻松掌握!

示例1

如下函数是计算两个数字的和

def addition(a, b):
   return a + b
print(addition(3,4))

此函数只需要输入两个数字。如果我们想要一个计算三个或四个数字的函数呢?我们甚至可能不希望对传递到函数的参数数设置约束。

在这种情况下,我们可以使用 *args 作为参数。

def addition(*args):
   result = 0
   for i in args:
      result += i
   return result

传递给加法函数的参数存储在元组中。我们可以在 args 变量上迭代。

示例2

在第二个示例之前,先解释位置参数关键词参数的区别。

  • 位置参数仅由名称声明。
  • 关键字参数由名称和默认值声明。

调用函数时,必须给出位置参数的值。否则,我们将得到一个错误。如果我们不指定关键字参数的值,则它采用默认值。

def addition(a, b=2): #a is positional, b is keyword argument
   return a + b
print(addition(1))
3
def addition(a, b): #a and b are positional arguments
   return a + b
print(addition(1))
TypeError: addition() missing 1 required positional argument: 'b'

我们现在可以做第二个例子了。

def arg_printer(a, b, *args):
   print(f'a is {a}')
   print(f'b is {b}')
   print(f'args are {args}')
arg_printer(3, 4, 5, 8, 3)
a is 3
b is 4
args are (5, 8, 3)

前两个值被赋予 a 和 b。其余值存储在 args 元组中。

示例3

如果我们在位置参数之后放置关键字参数。在调用函数时,我们看以下示例:

arg_printer(a=4, 2, 4, 5)
SyntaxError: positional argument follows keyword argument

将值分配给通常为位置参数的 ,则它将成为关键字参数。由于后跟位置参数,因此我们得到一个语法错误

示例4

在下面的函数中,option 是关键字参数(它有一个默认值)

def addition(a, b, *args, option=True):
   result = 0
   if option:
      for i in args:
      result += i
      return a + b + result
   else:
      return result

由于option 默认值为 True,因此函数返回参数的总和,除非选项参数声明为 False。

print(addition(1,4,5,6,7))
23
print(addition(1,4,5,6,7, option=False))
0

示例5

**kwargs 收集未显式定义的所有关键字参数。因此,它执行与 *args 相同的操作,但用于关键字参数。

默认情况下,**kwargs 是一个空字典。每个未定义的关键字参数都存储为 **kwargs 字典中的键值对。

def arg_printer(a, b, option=True, **kwargs):
   print(a, b)
   print(option)
   print(kwargs)
arg_printer(3, 4, param1=5, param2=6)
3 4
True
{'param1': 5, 'param2': 6}

示例6

我们在函数中可以同时使用 *args 和 **kwargs,但 *args 必须放在 **kwargs 之前。

def arg_printer(a, b, *args, option=True, **kwargs):
   print(a, b)
   print(args)
   print(option)
   print(kwargs)
arg_printer(1, 4, 6, 5, param1=5, param2=6)
1 4
(6, 5)
True
{'param1': 5, 'param2': 6}

示例7

我们可以使用 *args 和 **kwargs 打包和解包变量。

def arg_printer(*args):
   print(args)

如果我们将列表传递给上面的函数,它将作为单个元素存储在 args 元组中。

lst = [1,4,5]
arg_printer(lst)
([1, 4, 5],)

如果我们在 lst 之前放一个星号,列表中的值将解压缩并单独存储在 args 元组中。

lst = [1,4,5]
arg_printer(*lst)
(1, 4, 5)

示例8

我们可以通过多个可操作项与单个元素一起解包。所有值都将存储在 args 元组中,这一招有时非常有用的。

lst = [1,4,5]
tpl = ('a','b',4)
arg_printer(*lst, *tpl, 5, 6)
(1, 4, 5, 'a', 'b', 4, 5, 6)

示例9

我们也可以使用关键字参数进行打包和解包。

def arg_printer(**kwargs):
   print(kwargs)

但作为关键字参数传递的可执行参数必须是映射(如字典)

dct = {'param1':5, 'param2':8}
arg_printer(**dct)
{'param1': 5, 'param2': 8}

示例10

如果我们还将其他关键字参数与字典一起传递,将它们组合并存储在 kwargs 字典中。

dct = {'param1':5, 'param2':8}
arg_printer(param3=9, **dct)
{'param3': 9, 'param1': 5, 'param2': 8}

总结

通过上述 10 个示例的讲解,相信大家对*args 和 **kwargs 有了一定程度的理解。喜欢欢迎收藏、分享。

技术交流

欢迎转载、收藏本文,码字不易,有所收获点赞支持一下!

为方便进行学习交流,本号开通了技术交流群,添加方式如下:

直接添加小助手微信号:pythoner666,备注:CSDN+python,或者按照如下方式添加均可!
在这里插入图片描述