在Python编程中,*args与 **kwargs是两个重要概念,可以让我们编写灵活且可扩展的函数
关于*args
*args用于将不定数量的非关键字参数传递给函数,args是一个元组,包含了所有传递给函数的非关键字参数
使用示例:
def my_function(*args):
for arg in args:
print(arg)
my_function(1, 2, 3)
'''
代码输出
1
2
3
'''
使用场景:
当我们不知道函数会接受多少参数时,*args是非常有用的
def add_numbers(*args):
return sum(args)
numbers = [1, 2, 3, 4]
print(add_numbers(*numbers)) #使用*展开列表
'''
代码输出:
10
'''
# 1+2+3+4=10
关于**kwargs
**kwargs用于将不定数量的关键字参数传递给函数,kwargs是一个字典,包含了所有传递给函数的关键字参数
使用示例:
def test_func(arg1, arg2, **kwargs):
print("arg1:", arg1)
print("arg2:", arg2)
for key, value in kwargs.items():
print(key, value)
test_func("hello", "world", option1 = "value1", option2 = "value2")
'''
代码输出:
arg1: hello
arg2: world
option1 value1
option2 value2
'''
当不知道函数会接收多少个关键字参数时,**kwargs 是非常有用的
同时使用*args与**kwargs
可以在一个函数中同时使用*args与**kwargs
使用示例:
def my_function(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
my_function(1, 2, 3, name="John", age=30)
'''
代码输出:
args: (1, 2, 3)
kwargs: {'name': 'John', 'age': 30}
'''
动态函数调用
def call_function(func, *args, **kwargs):
return func(*args, **kwargs)
def add(a,b):
return a+b
def greet(name, greeting="Hello"):
return f"{greeting}, {name}"
print(call_function(add, 1,2)) # 输出3
print(call_function(greet, "Alice")) # 输出 Hello Alice
print(call_function(greet, "Bob", greeting = "Hi")) # 输出 Hi Bob
注意事项
1.在定义函数时,*args 必须出现在 **kwargs 之前。
def my_function(*args, **kwargs):
pass
2.当在函数中同时使用普通参数、*args 和 **kwargs 时,顺序必须是:普通参数,*args,**kwargs
def my_function(arg1, arg2, *args, **kwargs):
pass
扩展
items()是字典对象的一个方法,用于返回一个字典中所有的键值对
my_dict = {0:"a", 1:"b", 2:"c"}
for key,value in my_dict.items():
print(key, value)
'''
代码输出:
0 a
1 b
2 c
'''