Python 函数
函数是组织好的、可重复使用的、用于实现单一或相关联功能的代码段。函数能提高代码的模块化和可维护性。本文将详细介绍Python中的函数,包括函数的定义与调用、参数传递与返回值、匿名函数和递归函数。
函数的定义与调用
定义函数
在Python中,使用def
关键字定义一个函数。函数名后跟一对圆括号,括号中可以包含参数列表,最后以冒号结尾。函数体缩进书写。
def greet():
print("Hello, World!")
调用函数
定义好函数后,可以通过函数名加圆括号来调用它。
greet() # 输出:Hello, World!
带参数的函数
可以在定义函数时指定参数,以便在调用时传递不同的值。
def greet(name):
print(f"Hello, {name}!")
greet("Alice") # 输出:Hello, Alice!
greet("Bob") # 输出:Hello, Bob!
带默认参数的函数
可以为参数指定默认值,在调用时如果没有传递对应参数,则使用默认值。
def greet(name="Guest"):
print(f"Hello, {name}!")
greet() # 输出:Hello, Guest!
greet("Alice") # 输出:Hello, Alice!
参数传递与返回值
位置参数
按顺序传递给定数量的参数。
def add(a, b):
return a + b
result = add(2, 3)
print(result) # 输出:5
关键字参数
通过参数名指定参数,可以不按顺序传递。
def add(a, b):
return a + b
result = add(b=3, a=2)
print(result) # 输出:5
可变长度参数
使用*args
和**kwargs
可以处理不定数量的参数。
# *args 接受多个位置参数
def add(*args):
return sum(args)
result = add(1, 2, 3, 4)
print(result) # 输出:10
# **kwargs 接受多个关键字参数
def greet(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
greet(name="Alice", age=25)
# 输出:
# name = Alice
# age = 25
返回值
使用return
语句从函数返回一个值或多个值。
def add(a, b):
return a + b
result = add(2, 3)
print(result) # 输出:5
# 返回多个值
def get_name_and_age():
name = "Alice"
age = 25
return name, age
name, age = get_name_and_age()
print(name) # 输出:Alice
print(age) # 输出:25
匿名函数(Lambda)
匿名函数也称为lambda表达式,是一种简短的定义小型匿名函数的方法。使用lambda
关键字定义匿名函数。
# 定义一个lambda表达式,计算两个数之和
add = lambda x, y: x + y
result = add(2, 3)
print(result) # 输出:5
# 在高阶函数中使用lambda表达式
numbers = [1, 2, 3, 4]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # 输出:[1, 4, 9, 16]
递归函数(Recursive Function)
递归是指在运行的过程中调用自身。递归函数是指在其定义中调用自身的函数。递归必须有终止条件,否则会导致无限循环。
示例:计算阶乘
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
result = factorial(5)
print(result) # 输出:120
示例:斐波那契数列
def fibonacci(n):
if n <= 0:
return []
elif n == 1:
return [0]
elif n == 2:
return [0, 1]
else:
fibs = fibonacci(n - 1)
fibs.append(fibs[-1] + fibs[-2])
return fibs
result = fibonacci(10)
print(result)
# 输出:[0,1,1,2,3,5,8,13,21,34]