python函数传递带*的参数说明

本文介绍了Python中使用*和**进行参数传递的方法。包括如何利用*传递不定数量的位置参数,以及如何利用**传递关键字参数,并通过实例展示了这两种参数传递方式的工作原理。

1.带一个*号的参数传递

   一般的方法都是指定了传递参数的个数,但是有的时候你不知道你需要传递多少个参数,这个时候就可以在参数之前加上一个*号,可以是0个也可以是n个,传递进去的参数都是存在元祖里面的。

 def test(*a):
    length = len(a)
    if (length==0):
        print 'None'
    else:
        print a


>>> test()
None
>>> test('ji',10)
('ji', 10)


2. 带**的参数传递:

   形参名前加俩个*表示,参数在函数内部将被存放在以形式名为标识符的字典中,这时调用函数的方法则需要采用arg1=value1,arg2=value2这样的形式。

 def test(**a):
    length = len(a)
    if (length==0):
        print 'None'
    else:
        print a


>>> test()
None
>>> test(x=1,y=2)
{'y': 2, 'x': 1}
>>> test(1,2)
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    test(1,2)
TypeError: test() takes exactly 0 arguments (2 given)

  

Python 函数参数中,星号 `*` 和双星号 `**` 是用于处理可变数量的参数的强大工具。它们允许函数接受任意数量的位置参数和关键字参数。 ### 星号 `*` 的作用 - **收集位置参数为元组**:当在函数定义中使用 `*args` 时,所有额外的位置参数都会被收集到一个名为 `args` 的元组中。 ```python def my_function(*args): for arg in args: print(arg) my_function(1, 2, 3) ``` - **解包可迭代对象为位置参数**:在函数调用时,如果传递函数的是一个可迭代对象(如列表或元组),可以使用 `*` 来解包这个可迭代对象,将其元素作为单独的位置参数传入函数[^3]。 ```python def add(a, b): return a + b numbers = [1, 2] result = add(*numbers) # 相当于 add(1, 2) ``` ### 双星号 `**` 的作用 - **收集关键字参数为字典**:在函数定义中使用 `**kwargs` 时,所有额外的关键字参数会被收集到一个名为 `kwargs` 的字典中,键是参数名,值是对应的参数值。 ```python def bar(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") bar(name='Alice', age=30) ``` - **解包字典为关键字参数**:在函数调用时,如果有一个字典包含了需要传递函数的关键字参数,可以使用 `**` 来解包这个字典,使其内容作为关键字参数传入函数[^4]。 ```python def greet(name, message): print(f"{message}, {name}!") info = {'name': 'Bob', 'message': 'Hello'} greet(**info) # 相当于 greet(name='Bob', message='Hello') ``` ### 使用方法 当你想要创建一个能够处理不确定数量参数函数时,你可以这样定义你的函数: - 如果你需要处理不确定数量的位置参数,可以在函数定义中使用 `*args`。 - 如果你需要处理不确定数量的关键字参数,可以在函数定义中使用 `**kwargs`。 此外,在实际编程中,`*` 和 `**` 还可以用来强制要求某些参数必须以关键字形式提供,这通常与普通参数一起使用来分隔那些必须以关键字形式提供的参数。 例如: ```python def example(a, *, b, c): pass example(1, b=2, c=3) # 正确: b 和 c 必须以关键字形式给出 # example(1, 2, 3) # 错误: b 和 c 需要关键字形式 ``` 通过这种方式,Python 提供了非常灵活的方式来处理函数参数,使得编写通用且易于使用的函数成为可能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值