1. Python函数参数定义
在Python中,函数是代码的重复使用,是一段可重用的代码块。参数定义的形式如下:
def func_name(param1, param2=default_value, *args, **kwargs):
"""docstring"""
statement(s)
其中:
def:定义一个函数;
func_name:函数名,命名要符合Python变量命名规范;
param1,param2:参数名,函数所需参数,如果有多个参数,用逗号分隔;
default_value:参数默认值,定义了参数默认值后,调用函数时可以不传递该参数,该参数将使用默认值;
*args:可变参数用于函数可能需要的不定数量的参数。用元组(tuple)来收集这些参数;
**kwargs:关键字参数用于函数可能需要的不定数量的关键字参数。用字典(dict)来收集这些参数。
1.1 定义函数:
我们可以定义一个数学函数,例如计算两个数之和:
def add(a, b):
return a + b
在这个函数的定义中,a和b是参数名,用逗号分隔。函数名称和参数列表共同构成了函数的定义。return指定了函数的返回值。
1.2 参数默认值:
参数默认值指定了函数在不传递参数时使用的值。以下函数使用参数默认值:
def increment(a, b=1):
return a + b
在这个函数的定义中,a是必须的参数,没有默认值。如果没有传递b参数,则使用默认值1作为b的值。该函数可以用以下方式调用:
increment(1) # 2
increment(1, 3) # 4
2. Python函数参数传递方式
2.1 位置参数传递
在Python中,默认情况下,参数传递是基于位置的。参数的顺序和数量在调用函数时必须与函数定义中的顺序和数量完全相同。例如:
def foo(a, b, c):
print(f"a={a}, b={b}, c={c}")
foo(1, 2, 3) # a=1, b=2, c=3
foo(3, 2, 1) # a=3, b=2, c=1
2.2 关键字参数传递
如果参数的数量变得很大,或者用于调用函数的参数具有默认值,则使用关键字参数传递更为方便。在关键字参数传递中,我们可以直接使用参数名传递参数。
def foo(u, v, w):
print(f"u={u}, v={v}, w={w}")
foo(u = 1, v = 2, w = 3) # u=1, v=2, w=3
foo(w = 3, u = 1, v = 2) # u=1, v=2, w=3
2.3 可变参数传递
Python允许我们使用*和**操作符来传递可变数量的参数。*args和**kwargs是常用的参数名。
*args用于函数可能需要的不定数量的参数。用元组(tuple)来收集这些参数。例如:
def foo(*args):
for arg in args:
print(arg)
foo(1, 2, 3) # 1, 2, 3
**kwargs用于函数可能需要的不定数量的关键字参数。用字典(dict)来收集这些参数。例如:
def foo(**kwargs):
for key, value in kwargs.items():
print(f"{key}={value}")
foo(a=1, b=2, c=3) # a=1, b=2, c=3
2.4 组合使用
我们可以进行参数的位置传递、关键字传递和可变参数传递的组合。例如:
def foo(a, b, *args, **kwargs):
print(f"a={a}, b={b}, args={args}, kwargs={kwargs}")
foo(1, 2, 3, 4, 5, x=6, y=7) # a=1, b=2, args=(3, 4, 5), kwargs={'x': 6, 'y': 7}
在这个例子中,a和b是必须的参数,*args用于收集多余的位置参数,**kwargs用于收集多余的关键字参数。