函数
函数是 Python 中非常重要的概念,它们是代码的构建块,可以帮助我们组织代码、提高代码的可读性和可重用性。
函数的定义
- 使用
def
关键字定义函数,后面紧跟函数名和圆括号。圆括号内可以包含参数,多个参数用逗号隔开。 - 函数体由缩进的代码块组成。
docstring
是函数的文档字符串,用来描述函数的功能,可以用help(函数名)
查看。
python
def greet(name):
"""这个函数用于打招呼"""
print(f"你好,{name}!")
函数的调用
通过函数名和圆括号调用函数,圆括号内可以传递参数。
python
greet("Alice") # 传递参数 "Alice" 给函数 greet
函数的参数
函数可以接受参数,这些参数是传递给函数的值,函数可以在内部使用这些参数。
位置参数
按照参数的顺序传递。
python
def add(a, b):
return a + b
result = add(3, 5) # result 为 8
关键字参数
按照参数名传递参数。
python
result = add(b=5, a=3) # result 为 8
默认参数
给参数指定默认值,如果没有传递该参数,则使用默认值。
python
def greet(name, greeting="你好"):
print(f"{greeting}, {name}!")
greet("Bob") # 输出 "你好, Bob!"
greet("Charlie", "早上好") # 输出 "早上好, Charlie!"
函数的返回值
函数可以使用 return
语句返回一个值,这个值可以被其他代码使用。
python
def get_square(number):
return number * number
square_of_5 = get_square(5) # square_of_5 为 25
函数的类型
- 内置函数: Python 提供了许多内置函数,例如
print()
、len()
、max()
等。 - 自定义函数: 用户自己定义的函数。
- 匿名函数 (lambda 表达式): 没有名字的函数,通常用于简化代码。
python
square = lambda x: x * x
print(square(5)) # 输出 25
函数的作用域
- 全局变量: 定义在函数之外的变量,所有函数都可以访问。
- 局部变量: 定义在函数内部的变量,只能在函数内部使用。
- 全局变量和局部变量同名: 如果函数内部定义了一个与全局变量同名的变量,那么函数内部使用的是局部变量。
global
关键字: 可以修改全局变量的值。
python
global_var = 10
def change_global():
global global_var
global_var = 20
change_global()
print(global_var) # 输出 20
函数的递归
- 函数可以调用自身,这种调用方式称为递归。
- 递归函数必须有一个终止条件,否则会陷入无限循环。
python
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5)) # 输出 120
函数的装饰器
- 装饰器是用来修改函数功能的函数。
- 使用
@
符号来装饰函数。
python
def my_decorator(func):
def wrapper(*args, **kwargs):
print("函数执行前")
result = func(*args, **kwargs)
print("函数执行后")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
say_hello("Alice")
# 输出:
# 函数执行前
# Hello, Alice!
# 函数执行后
函数式编程
函数式编程是一种编程范式,它将函数视为一等公民,可以像其他数据类型一样传递和使用。Python 支持函数式编程,并提供了几个内置函数来简化函数式编程操作。map()
、filter()
、reduce()
是常用的函数式编程函数。
map()
函数
map()
函数用于将一个函数应用于一个可迭代对象中的每个元素,并返回一个新的可迭代对象。假设我们有一个列表,需要将列表中的每个元素平方。
python
numbers = [1, 2, 3, 4, 5]
# 使用 map() 函数将平方函数应用于列表中的每个元素
squares = map(lambda x: x**2, numbers)
# 将结果转换为列表
squares_list = list(squares)
print(squares_list) # 输出:[1, 4, 9, 16, 25]
filter()
函数
filter()
函数用于过滤一个可迭代对象中的元素,返回一个包含满足特定条件的元素的新可迭代对象。假设我们有一个列表,需要筛选出其中的偶数。
python
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
# 使用 filter() 函数筛选出偶数
even_numbers = filter(lambda x: x % 2 == 0, numbers)
# 将结果转换为列表
even_numbers_list = list(even_numbers)
print(even_numbers_list) # 输出: [2, 4, 6, 8]
reduce()
函数
reduce()
函数用于将一个可迭代对象中的元素累积成一个值。假设我们要计算列表中所有元素的乘积。
python
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# 使用 reduce() 函数计算乘积
product = reduce(lambda x, y: x * y, numbers)
print(product) # 输出: 120
可变参数
当参数不确定的时候,可以使用可变参数定义要传入的参数。*args
和 **kwargs
允许函数接收任意数量的位置参数和关键字参数。
python
def print_args(*args, **kwargs):
print("位置参数:", args)
print("关键字参数:", kwargs)
print_args(1, 2, 3, name="Alice", age=25)
# 输出:
# 位置参数: (1, 2, 3)
# 关键字参数: {'name': 'Alice', 'age': 25}
标准参数与 *args
、**kwargs
在使用时的顺序
python
def some_func(fargs, *args, **kwargs)