python 定义方法的参数带有*和**的区别

本文深入探讨了Python中使用*和**符号处理不定数量参数的方法。通过实例讲解了如何利用*params接收任意数量的位置参数,以及如何用**others接收任意数量的关键字参数。文章还介绍了如何将列表和字典作为参数传递给函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python 定义方法时,会出现某些传入参数的数量不确定的情况,此时需要使用到这两种符号来处理:

例如:定义一个累加器,输入的参数数目可变的情况(*)

一般定义方法时为以下的方式,

两个数字累加:

def add(param1, param2):
    print(param1+param2)

三个数字累加:

def add(param1, param2, param3):
    print(param1+param2+param3)

现在可以使用*来处理这个问题:

def add(*params):
    sum = 0
    for item in params:
        sum += item
    print(sum)

调用此方法:add(1, 2, 3, 4)

另外,还有另一种传参的方式
现在有一数组:arr = [1, 2, 3]

调用方法:add(*arr)

注意:传入的params参数可为空,则add()返回就是0


例如:定义录入学校人员的身份信息的方法,由于学生有成绩信息,老师有职称、工资等信息;所以定义方法时不能确定输入的参数名,此时可以使用**来定义参数名(**)

def addInfo(name, age, **others):
  info = "name: %s, age: %s" % (name, age)
  for item in others:
    info = info + ", " + item + ": %s" % others[item]
  print(info)

调用此方法:addInfo("小明", 12, score=98)

另外,调用此方法还有另一种方式:

现在有一字典值:data = {"score": 96, "subject": "语文"}

调用方法:addInfo("小明", 12, **data)

 

上面用到*和**来传入数组和字典的方式,相当于把数组和字典里面的项解析出来逐个传入到方法中,对于接受到的不确定的数组变量和字典变量,这种方式的传参是很有用的

### Python*args **kwargs 的区别及用法 在Python中,`*args``**kwargs`是用于定义函数时处理不定数量参数的两种方式。 #### 1. `*args` 的作用 `*args`允许函数接收任意数量的位置参数。这些参数会被打包成一个元组(tuple)传递给函数[^1]。 例如: ```python def test_args(*args): print(args) test_args(1, 2, 3, "hello") # 输出: (1, 2, 3, 'hello') ``` 上述代码展示了当调用带有`*args`的函数时,传入的所有位置参数都会被收集到一个元组中。 #### 2. `**kwargs` 的作用 `**kwargs`则用来接收任意数量的关键字参数,并将其存储为字典(dict)。 示例如下: ```python def test_kwargs(**kwargs): print(kwargs) test_kwargs(name="Alice", age=25, city="Beijing") # 输出: {'name': 'Alice', 'age': 25, 'city': 'Beijing'} ``` 这里可以看到,所有的关键字参数都被封装进了名为`kwargs`的字典里。 #### 3. 同时使用 `*args` `**kwargs` 如果希望一个函数既能接受任意数量的位置参数又能接受任意数量的关键字参数,则可以在同一个函数签名中同时指定`*args``**kwargs`,注意的是,`*args`需位于`**kwargs`前[^3]。 下面的例子说明了这一点: ```python def combined_example(*args, **kwargs): print("Positional arguments:", args) print("Keyword arguments:", kwargs) combined_example(10, 20, fruit='apple', color='red') # Positional arguments: (10, 20) # Keyword arguments: {'fruit': 'apple', 'color': 'red'} ``` 此例子清晰地表明了位置参数关键字参数是如何分别通过`*args``**kwargs`来捕获并打印出来的。 #### 总结 - 使用`*args`可以方便地处理未知数目的非命名实参集合。 - 而`**kwargs`则是为了应对不确定数目以及名称已知的情况下的键值对形式输入数据集。 - 当两者共同存在于同一方法声明内部时候,请确保遵循先写`*args`,接着才是`**kwargs`这样的排列次序规定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值