Skip to content

函数

函数是 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)

Released under the MIT License.