可以通过为某一个参数设置默认值,从而变为可选参数,就相当于为你默认设置了参数,而不需要自己再次设置
但是对于复杂的需要传参的函数,这种设置默认参数的行为并没有什么太大的作用
def greet(name, age=None, message="Hello"):
print(message, name)
if age is not None:
print("Age:", age)
greet("Charlie") # 输出: Hello Charlie
greet("Dave", message="Hi") # 输出: Hi Dave
greet("Eve", age=25, message="Hey") # 输出: Hey Eve / Age: 25
在 Python 中,你可以使用星号(*
)来定义一个参数为可变参数,也称为可变长度参数或不定长参数。这允许你在函数调用时传递任意数量的参数。
以下是两种常见的方式来定义可变参数:
*args
使用*args
:这种方式可以接收任意数量的位置参数,这种位置参数只能使用输入值进行传递,而不能设置键值对这种形式,因为在函数体内部,args
被视为一个元组(tuple)。
def my_function(*args):
for arg in args:
print(arg)
# 调用函数并传递多个参数
my_function(1, 2, 3) # 输出: 1 2 3
my_function('a', 'b') # 输出: a b
在这个示例中,*args
参数定义了可变参数。在函数体内部,args
被视为一个元组(tuple),包含了所有传递给函数的位置参数。
**kwargs
使用**kwargs
:这种方式可以接收任意数量的关键字参数,这种关键字参数只能使用键值对这种形式,因为在函数体内部,kwargs
被视为一个字典(dict)。
def my_function(**kwargs):
for key, value in kwargs.items():
print(key, value)
# 调用函数并传递多个关键字参数
my_function(name="Alice", age=25) # 输出: name Alice / age 25
my_function(country="USA", city="New York", code=123) # 输出: country USA / city New York / code 123
在这个示例中,**kwargs
参数定义了可变关键字参数。在函数体内部,kwargs
被视为一个字典(dict),包含了所有传递给函数的关键字参数及其对应的值。
你也可以同时使用 *args
和 **kwargs
,以接收任意数量的位置参数和关键字参数。
*args
和 **kwargs
def my_function(*args, **kwargs):
for arg in args:
print("Positional argument:", arg)
for key, value in kwargs.items():
print("Keyword argument -", key, ":", value)
# 调用函数并传递多个位置参数和关键字参数
my_function(1, 2, name="Alice", age=25)
输出:
Positional argument: 1
Positional argument: 2
Keyword argument - name : Alice
Keyword argument - age : 25