python函数中最常见的2个参数 *args,**kwargs,*args是非关键字参数,用于元组,**kw是关键字参数,用于字典
下面具体来介绍:
*args:关键标志为星号*,名称可以随意,当传入函数中的参数个数未知,且不需要知道参数名称时,使用*args。传入函数中的几个参数组成元组
**kwargs:关键标志为星号**,名称可以随意。当传入函数中的参数个数未知但需要知道参数的名称时,使用**kw。传入函数中的几个参数组成字典。
1、
例子:
def my_func(arg1, arg2, *args, **kwargs):
print(f"arg1={arg1}")
print(f"arg2={arg2}")
print(f"args={args}")
print(f"kwargs={kwargs}")
my_func(1, 2, 3, 4, 5, foo='bar', baz=10)
当你调用这个函数时,arg1
和arg2
是必需的参数,而*args
和**kwargs
分别是非关键字参数和关键字参数,可以传递任意数量的值:
结果:
C:\Users\Thinkpad\AppData\Local\Programs\Python\Python39\python.exe C:/Users/Thinkpad/Desktop/0301/shiyan.py
arg1=1
arg2=2
args=(3, 4, 5)
kwargs={'foo': 'bar', 'baz': 10}
Process finished with exit code 0
其中,arg1
和arg2
接收了1
和2
这两个必需参数;args
接收了传递给函数的剩余非关键字参数(3, 4, 5)
;kwargs
接收了关键字参数foo='bar'
和baz=10
,它们作为字典类型传递给函数。
2、传参形式
def my_func(arg1, arg2, *args, **kwargs):
print(f"arg1={arg1}")
print(f"arg2={arg2}")
print(f"args={args}")
print(args[0])
''' 更改元组值
创建元组后,您将无法更改其值。元组是不可变的,或者也称为恒定的。
但是有一种解决方法。您可以将元组转换为列表,更改列表,然后将列表转换回元组。'''
lst = list(args)
lst[0]=9
args = tuple(lst)
print("修改后",args[0])
print(f"kwargs={kwargs}")
print(kwargs["foo"])
kwargs["foo"]="zj"
# 定义一个包含非关键字参数和关键字参数的元组和字典
args_tuple = (3, 4, 5)
kwargs_dict = {'foo': 'bar', 'baz': 10}
# 使用*和**对元组和字典进行拆包传递
my_func(1, 2, *args_tuple, **kwargs_dict)
print(args_tuple)
print(kwargs_dict)
结果:
C:\Users\Thinkpad\AppData\Local\Programs\Python\Python39\python.exe C:/Users/Thinkpad/Desktop/0301/shiyan.py
arg1=1
arg2=2
args=(3, 4, 5)
3
修改后 9
kwargs={'foo': 'bar', 'baz': 10}
bar
(3, 4, 5)
{'foo': 'bar', 'baz': 10}
Process finished with exit code 0