当前位置:首页 > 技术分析 > 正文内容

Python 中的 *args 和 **kwargs

ruisui8821小时前技术分析1

在 Python 中,*args 和 **kwargs 用于允许函数接受任意数量的参数。这些特性在设计需要处理可变数量输入的函数时提供了极大的灵活性。



代码示例:

# *args example
def fun(*args):
 return sum(args)

print(fun(1, 2, 3, 4))
print(fun(5, 10, 15))

# **kwargs example
def fun(**kwargs):
 for k, val in kwargs.items():
 print(k, val)

fun(a=1, b=2, c=3)


输出:

10
30
a 1
b 2
c 3



下面我们深入探讨 *args 和 **kwargs:



Python 中用于传递多个参数的两个特殊符号是:

  • *args(非关键字参数)
  • **kwargs(关键字参数)


注意: 当我们不确定应该向函数传递多少参数时,可以使用“通配符”或“*”符号,例如 *args 或 **kwargs。


Python *args

在函数定义中,特殊语法 *args 用于将可变数量的参数传递给函数。它用于传递非关键字的、可变长度的参数列表。


例如,我们想创建一个乘法函数,它可以接受任意数量的参数并将它们全部相乘。这可以通过使用 *args 来实现。

使用 * 之后,与之关联的变量会变成可迭代的,这意味着你可以对它进行迭代操作,或者使用一些高阶函数,如 map 和 filter 等。


示例1:Python 程序用于说明 *args 用于可变数量的参数

def myFun(*argv):
 for arg in argv:
 print(arg)
myFun('Hello', 'Welcome', 'to', '架构笔记')

输出:
第一个参数:Hello
*argv 参数:Welcome
*argv 参数:to
*argv 参数:GeeksforGeeks


Python **kwargs

在函数定义中,特殊语法 **kwargs 用于传递可变长度的参数列表。我们使用双星号 ** 来表示 kwargs。

  • 关键字参数是指在将变量传递到函数时,为其提供名称。
  • 它会收集传递给函数的所有额外的关键字参数,并将它们存储在一个字典中。


示例2:Python 程序用于说明 **kwargs 用于可变长度的参数列表

def fun(**kwargs):
 for k, val in kwargs.items():
 print("%s == %s" % (k, val))
# 测试代码
fun(s1='Geeks', s2='for', s3='Geeks')

输出:
s1 == Geeks
s2 == for
s3 == Geeks

对于 s1='Geeks',s1 是键,'Geeks' 是值。简单来说,我们赋值的对象是值,而被赋值的对象是键。


在 Python 中同时使用 *args 和 **kwargs 调用函数

我们可以在同一个函数中同时使用 *args 和 **kwargs 来接受位置参数和关键字参数的混合。


在这个示例中,函数 fun 可以同时处理位置参数和关键字参数。args 参数将位置参数收集到一个元组中,而 kwargs 参数将关键字参数收集到一个字典中。




Python 中的 *args 和 **kwargs - 常见问题

(1)为什么要在 Python 中使用 *args 和 **kwargs?

*args 和 ***kwargs 允许函数接受可变数量的参数:

  • *args(参数)允许你将可变数量的位置参数传递给函数。
  • **kwargs(关键字参数)允许你将可变数量的关键字参数(键值对)传递给函数。


(2)Python 中 *args 和 **kwargs 的区别是什么?

*args 将额外的位置参数收集到一个元组中,而 **kwargs 将额外的关键字参数收集到一个字典中。


(3)Python 中 *args 是列表还是元组?

*args 将额外的位置参数收集到一个元组(tuple)中,而不是列表。可以通过元组索引和迭代来访问这些参数。


(4)如何传递 **kwargs?

要将关键字参数(**kwargs)传递给函数,你需要在调用函数时提供键值对。

def example_function(**kwargs):
 print(kwargs)
example_function(name='Alice', age=30)


输出:

{'name': 'Alice', 'age': 30}

在函数内部,kwargs 是一个包含传递的关键字参数的字典。


#每天学python##我的宝藏兴趣#

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4698.html

标签: kwargs.get
分享给朋友:

“Python 中的 *args 和 **kwargs” 的相关文章

使用cgroup限制进程资源

这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...

抖音 Android 性能优化系列:启动优化实践

启动性能是 APP 使用体验的门面,启动过程耗时较长很可能使用户削减使用 APP 的兴趣,抖音通过对启动性能做劣化实验也验证了其对于业务指标有显著影响。抖音有数亿的日活,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减,因此,启动性能的优化成为了抖音 Android 基础技术团队在体验优化方向...

别让“跑焦”毁所有!仅需这一项设置,即可显著改善镜头对焦精度

我常常会收到一些摄影爱好者的私信,也一直在努力的帮助大家解决更多摄影中常见问题。在我收到的所有问题中。有一个问题是最麻烦的,那就是“为什么我的图像看起来模糊?”。这个问题几乎每个人都遇到过,究其原因可以说是多种多样相对复杂。起初我一直认为是对焦问题所导致,也就有了我之前所写的“后按对焦”以及“对焦模...

Vue Router 4 路由操作 - 路由导航

路由导航分为 声明式导航 和 编程式导航。通过 <router-link to="..."> 标签跳转的方式为声明式导航。通过 路由实例对象(router.push(...))跳转的为编程式导航。导航到不同的位置想要导航到不同的URL,使用 router.push 方法。...

vue.js 双向绑定如何理解,有什么好处!#云南小程序开发

Vue.js 的双向数据绑定是借助于 JavaScript 的一些特性,如对象的属性 getter 和 setter 以及 Vue 的依赖追踪系统实现的。简单来说,双向数据绑定就是数据与视图间的双向通信,也就是说数据的改变会马上反映到视图中,视图的改变也会立刻改变数据。具体来说,当你改变了数据时,视...

Alpine.js 如何火起来的!比 React/Vue 如何?

大家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!前言前端 JavaScript 框架的创新是这个时代最伟大的技术文化现象之一。Alpine 发音为 /??lpa?n/,中文为阿尔卑斯山、...