Python中的*args和kwargs是什么?该如何使用?

Python中的*args和kwargs是什么?该如何使用?其实这些并不是什么超级特殊的参数 也并不奇特 只是编程人员约定的变量名字 args 是 arguments 的缩写 表示位置参数 kwargs 是 keyword arguments 的缩写 表示关键字参数

欢迎大家来到IT世界,在知识的湖畔探索吧!

全文共2911字,预计学习时长9分钟

Python中的*args和kwargs是什么?该如何使用?

来源:Pexels



欢迎大家来到IT世界,在知识的湖畔探索吧!

在编程中,函数就是生命!

作为使用Python的新手——无论是编程新手,还是熟悉另一语言的人——都需要学习函数定义中的参数数目是否和想要传达的变元数目匹配。

这是基础性知识——有助于了解这个世界。

然而,接触到函数定义中的*args和kwargs时,也会让新手刚开始就遇到心理障碍。

在Python中的代码中经常会见到这两个词 args 和 kwargs,前面通常还会加上一个或者两个星号。

别被这些语句所绊倒。其实这些并不是什么超级特殊的参数,也并不奇特,只是编程人员约定的变量名字,args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。

这其实就是 Python 中可变参数的两种形式,并且 *args 必须放在 kwargs 的前面,因为位置参数在关键字参数的前面。

接下来,我们就具体学学如何使用它们。

Python中的*args和kwargs是什么?该如何使用?

位置参数vs关键字参数

为了学习什么是*args和kwargs,我们需要区分两个概念。

首先,分清楚位置参数和关键字参数的区别。在最基本的函数中,做一个匹配游戏——参数1与参数1匹配,参数2与参数2匹配,诸如此类。

  1. def printThese(a,b,c):
  2. print(a, “is stored in a”)
  3. print(b, “is stored in b”)
  4. print(c, “is stored inc”)printThese(1,2,3)
  5. “””
  6. 1 is stored in a
  7. 2 is stored in b
  8. 3 is stored in c
  9. “””

三项参数都是必需的,缺了其中一个就会致错。

  1. def printThese(a,b,c):
  2. print(a, “is stored in a”)
  3. print(b, “is stored in b”)
  4. print(c, “is stored inc”)printThese(1,2)
  5. “””
  6. TypeError: printThese() missing 1 required positional argument: ‘c’
  7. “””

为某函数定义中的参数给定默认值,该参数随后就会变为可选参数。

  1. def printThese(a,b,c=None):
  2. print(a, “is stored in a”)
  3. print(b, “is stored in b”)
  4. print(c, “is stored inc”)printThese(1,2)
  5. “””
  6. 1 is stored in a
  7. 2 is stored in b
  8. None is stored in c
  9. “””

另外,这些可选参数也会成为可供选择的关键字,则此时可以规定函数调用参数名称并相应进行映射。

将三个变量默认值设为None,然后看看如何在不考虑顺序的情况下进行映射。

  1. defprintThese(a=None,b=None,c=None):
  2. print(a, “is stored in a”)
  3. print(b, “is stored in b”)
  4. print(c, “is stored inc”)printThese(c=3, a=1)
  5. “””
  6. def printThese(a=None,b=None,c=None):
  7. print(a, “is stored in a”)
  8. print(b, “is stored in b”)
  9. print(c, “is stored inc”)printThese(c=3, a=1)
  10. “””
  11. 1 is stored in a
  12. None is stored in b
  13. 3 is stored in c
  14. “””
Python中的*args和kwargs是什么?该如何使用?

Splat运算符

Python中的*args和kwargs是什么?该如何使用?

来源:Pexels

从开始说我爱该运算符的名称开始——太……可视化了。*常常与乘法运算有关,但是在Python中,则是splat运算符的两倍。

该运算符就像一个彩盒。笔者把延伸运算符——相当于splat的JavaScript——这个过程可以看做是打开一个多米诺骨牌,形成一个更大的序列,但是splat需要更有力的类比。

利用以下例子更容易解释清楚。

  1. a = [1,2,3]
  2. b = [*a,4,5,6]print(b) # [1,2,3,4,5,6]

在代码实例中,将a的内容移入(解包)到新列表b中。

Python中的*args和kwargs是什么?该如何使用?

如何使用*args和kwargs

我们知道splat运算符解包多个值,并且知道函数参数有两种类型。若现在还未弄明白,那么可以将*args理解为变元的缩写,而kwargs理解为关键字变元的缩写。

各参数用于解压其各自的变元类型,允许使用可变字长变元列表进行函数调用。例如,创建一个函数表示学生的考试分数。

  1. def printScores(student,*scores):
  2. print(f”Student Name:{student}”)
  3. for score in scores:
  4. print(score)printScores(“Jonathan”,100, 95, 88, 92, 99)
  5. “””
  6. Student Name: Jonathan
  7. 100
  8. 95
  9. 88
  10. 92
  11. 99
  12. “””

噢,等等,我并未称呼其为*args?是的,“args”是一个标准化规范,但仍然只是一个名称。事实上,在*args中,唯一的星号是真正的参与者,创建了列表,其内容则是来自函数调用的位置参数(在这些定义变元后)。

这些理清楚之后,kwargs就很容易理解了。名称并不重要,重要的是双星号创建了字典,其内容是关键字参数,来自函数调用(在这些定义变元后)。

为了更好地演示,我们创建一个函数,输出参加全国英语等级考试的人员名单。

  1. def printPetNames(owner,pets):
  2. print(f”Owner Name:{owner}”)
  3. for pet,name in pets.items():
  4. print(f”{pet}:{name}”)printPetNames(“Jonathan”, dog=”Brock”,fish=[“Larry”, “Curly”, “Moe”],turtle=”Shelldon”)”””
  5. Owner Name: Jonathan
  6. dog: Brock
  7. fish: [‘Larry’, ‘Curly’, ‘Moe’]
  8. turtle: Shelldon
  9. “””
Python中的*args和kwargs是什么?该如何使用?

来源:Pexels

最后,再给大家提供一些额外的“知识福利”。

下面一些谏言可有助于大家规避常见的陷阱并扩展知识面。

· 利用*args和kwargs作为标准化规范,把握好位置参数和关键字参数;

· 不能将kwargs置于*args前,否则将产生错误;

· 清楚意识到关键字参数和kwargs之间的冲突,该值本是传达kwarg的意思,但是却不明就里的成为关键字参数的名称;

· 在函数调用时可以采用splat运算符。

Python中的*args和kwargs是什么?该如何使用?

Python中的*args和kwargs是什么?该如何使用?

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/128709.html

(0)
上一篇 26分钟前
下一篇 2025年 1月 28日 下午5:23

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信