在Python中,函数是一段被命名的代码块,只有在被调用时才会运行。函数通常可以接收输入参数,并在执行完毕后返回一个结果。掌握函数的定义、参数传递、返回值以及更多高级用法,是写出可读、可维护Python代码的基础。
1. 定义和调用函数
1.1 使用def关键词定义
def my_function():
print("Hello from a function!")
上面只是定义了函数,并没有执行它。想要运行,就需要调用:
my_function() # 调用函数
运行后将打印“Hello from a function!”。
2. 向函数传递参数(Arguments)
定义函数时可以在括号里列出参数,用于接收外部数据:
def greet(name):
print("你好, " + name)
greet("小明")
greet("小红")
这里name
就是函数定义时的“参数”(parameter),而"小明"
、"小红"
是实际调用时传递的“实参”(argument)。
2.1 位置参数与数量严格匹配
默认情况下,函数期望的参数数目和传递的实参数必须一致,否则会报错:
def my_add(a, b):
print(a + b)
my_add(10, 5) # 正常: 输出 15
my_add(10) # 错误: 缺少一个参数
3. 不定数量的参数(*args, **kwargs)
3.1 *args (无名参数)
如果不确定要传多少个参数,可在定义时在前面加*
:
def my_function(*kids):
print("最小的孩子是 " + kids[2])
my_function("aimier", "tuobiasi", "liunasi")
这里kids
会变成一个元组,可在函数中自由使用。
3.2 **kwargs (关键字参数)
如果要接收任意数目的“键=值”形式的参数,则可用**
:
def my_function(**kid):
print("他的姓是 " + kid["lname"])
my_function(fname="tuobiasi", lname="li")
这里kid
是一个字典,可以通过kid["lname"]
访问传入的具体键值。
4. 默认参数值
函数在定义参数时,可以指定一个默认值。若调用函数时不传该参数,则使用默认值:
def show_country(country="Nuowei"):
print("我来自 " + country)
show_country("Riben") # 自定义值
show_country() # 使用默认值Nuowei
5. 向函数传递列表、字典等
Python函数可接收任意类型参数,比如列表:
def print_foods(foods):
for x in foods:
print(x)
fruits = ["pingguo", "xiangjiao", "yingtao"]
print_foods(fruits)
在函数内部,该列表依然保持可迭代的性质。
6. 返回值 (return)
如果你想让函数在执行后返回一个结果给调用方,可用return
:
def multiply_by_5(x):
return 5 * x
print(multiply_by_5(3)) # 15
print(multiply_by_5(5)) # 25
函数遇到return
就会结束,并将后面表达式的值返回。
7. 空函数 (pass)
如果暂时不想在函数中写任何代码,可用pass
占位:
def my_empty_func():
pass
8. 仅限位置参数和仅限关键字参数
Python允许指定某些参数只能用位置方式、或只能用关键字方式传递。
8.1 仅限位置参数( / )
def my_func(x, /):
print(x)
my_func(3) # OK
my_func(x=3) # 错误, x只能作为位置参数
8.2 仅限关键字参数( * )
def my_func(*, x):
print(x)
my_func(x=3) # OK
my_func(3) # 错误, x只能作为关键字
8.3 混合( /, *, )
def my_function(a, b, /, *, c, d):
print(a + b + c + d)
my_function(5, 6, c=7, d=8) # a,b只能用位置传,c,d只能用关键字
9. 递归函数(Recursion)
函数可以调用自身,这被称为递归(Recursion)。递归在处理某些数学或分层结构问题时很有用。但要注意避免无限递归。
def tri_recursion(k):
if k > 0:
result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result
tri_recursion(6)
上述例子里,每次调用tri_recursion
会再次调用自身,直到k
等于0,然后把结果一级级返回。
总结
- def:用来定义函数。
- return:函数结束并返回一个值。
- *args / **kwargs:可变数量的实参或关键字参数。
- 默认参数:不传参时使用默认值。
- 仅限位置/关键字参数:
/
前只能位置传,*
后只能关键字传。 - 递归:函数调用自身,但需注意基线条件防止无限循环。
学会这些函数相关特性后,就能在Python中更灵活地组织和复用代码,编写更简洁、可维护的程序。