位置: 文档库 > Python > 文档下载预览

《深浅函数定义与用法汇总.doc》

1. 下载的文档为doc格式,下载后可用word或者wps进行编辑;

2. 将本文以doc文档格式下载到电脑,方便收藏和打印;

3. 下载后的文档,内容与下面显示的完全一致,下载之前请确认下面内容是否您想要的,是否完整.

点击下载文档

深浅函数定义与用法汇总.doc

《深浅函数定义与用法汇总》

在Python编程中,函数是构建可复用代码的核心工具。从基础到高级,函数的设计直接影响代码的可读性、维护性和执行效率。本文将系统梳理Python中函数的定义方式、参数传递机制、作用域规则及高级应用场景,帮助开发者全面掌握函数的使用技巧。

一、基础函数定义

Python使用def关键字定义函数,基本语法如下:

def function_name(parameters):
    """函数文档字符串"""
    # 函数体
    return result

示例:计算两数之和

def add_numbers(a, b):
    """返回两个数的和"""
    return a + b

result = add_numbers(3, 5)
print(result)  # 输出8

关键特性:

  • 函数名需遵循标识符命名规则
  • 参数列表可为空或包含多个参数
  • 通过return返回值,若无则返回None

二、参数传递机制

1. 位置参数与默认参数

位置参数按顺序传递,默认参数提供初始值:

def greet(name, message="Hello"):
    print(f"{message}, {name}!")

greet("Alice")  # 使用默认message
greet("Bob", "Hi")  # 覆盖默认值

注意事项:

  • 默认参数需放在非默认参数之后
  • 默认参数仅初始化一次,可能引发意外行为
def append_number(num, target=[]):
    target.append(num)
    return target

print(append_number(1))  # [1]
print(append_number(2))  # [1, 2](非预期结果)

2. 可变参数(*args, **kwargs)

处理不确定数量参数:

  • *args:接收任意数量位置参数,存储为元组
  • **kwargs:接收任意数量关键字参数,存储为字典
def log_info(*args, **kwargs):
    print("位置参数:", args)
    print("关键字参数:", kwargs)

log_info(1, 2, 3, name="Alice", age=25)
# 输出:
# 位置参数: (1, 2, 3)
# 关键字参数: {'name': 'Alice', 'age': 25}

3. 参数解包

将序列/字典解包为参数:

def calculate(a, b, op):
    if op == "add":
        return a + b
    elif op == "sub":
        return a - b

nums = (5, 3)
ops = {"op": "add"}

print(calculate(*nums, **ops))  # 输出8

三、作用域与命名空间

Python采用LEGB规则解析变量:

  1. Local(局部作用域)
  2. Enclosing(嵌套函数外层)
  3. Global(全局作用域)
  4. Built-in(内置作用域)
x = "global"

def outer():
    x = "enclosing"
    def inner():
        x = "local"
        print("inner:", x)  # 访问局部变量
    inner()
    print("outer:", x)  # 访问外层变量

outer()
print("global:", x)  # 访问全局变量

修改全局变量需使用global关键字:

count = 0

def increment():
    global count
    count += 1

increment()
print(count)  # 输出1

四、高阶函数应用

1. 函数作为参数

def apply_operation(func, a, b):
    return func(a, b)

def multiply(x, y):
    return x * y

result = apply_operation(multiply, 4, 5)
print(result)  # 输出20

2. 函数作为返回值

实现闭包(Closure):

def power_factory(exp):
    def power(base):
        return base ** exp
    return power

square = power_factory(2)
cube = power_factory(3)

print(square(5))  # 25
print(cube(5))    # 125

3. 装饰器(Decorators)

在不修改原函数代码的情况下扩展功能:

def logger(func):
    def wrapper(*args, **kwargs):
        print(f"调用函数: {func.__name__}")
        result = func(*args, **kwargs)
        print(f"结果: {result}")
        return result
    return wrapper

@logger
def add(a, b):
    return a + b

add(3, 4)
# 输出:
# 调用函数: add
# 结果: 7

带参数的装饰器:

def repeat(num_times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")
# 输出:
# Hello, Alice!
# Hello, Alice!
# Hello, Alice!

五、函数式编程工具

1. lambda表达式

创建匿名函数:

square = lambda x: x ** 2
print(square(5))  # 25

# 替代简单函数
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # [1, 4, 9, 16]

2. map/filter/reduce

from functools import reduce

numbers = [1, 2, 3, 4]

# map应用函数到序列
doubled = list(map(lambda x: x*2, numbers))  # [2, 4, 6, 8]

# filter筛选元素
evens = list(filter(lambda x: x%2 == 0, numbers))  # [2, 4]

# reduce累积计算
product = reduce(lambda x, y: x*y, numbers)  # 24

3. partial函数

固定部分参数创建新函数:

from functools import partial

def power(base, exp):
    return base ** exp

square = partial(power, exp=2)
print(square(5))  # 25

六、递归函数

递归实现阶乘计算:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(5))  # 120

尾递归优化(Python不原生支持,可模拟):

def factorial_tail(n, accumulator=1):
    if n == 0:
        return accumulator
    else:
        return factorial_tail(n-1, accumulator*n)

print(factorial_tail(5))  # 120

七、生成器函数

使用yield创建生成器:

def fibonacci(limit):
    a, b = 0, 1
    while a 

八、最佳实践

  1. 函数应保持单一职责
  2. 参数数量建议不超过5个
  3. 使用类型注解提高可读性(Python 3.5+)
  4. 为复杂函数添加文档字符串
  5. 避免过度使用全局变量
def divide(a: float, b: float) -> float:
    """返回两个数的除法结果
    
    Args:
        a: 被除数
        b: 除数(不能为0)
    
    Returns:
        商
    
    Raises:
        ValueError: 当b为0时
    """
    if b == 0:
        raise ValueError("除数不能为零")
    return a / b

关键词:Python函数、参数传递、作用域规则、高阶函数、装饰器、lambda表达式、递归、生成器、函数式编程

简介:本文全面总结Python函数的定义方式与高级用法,涵盖参数传递机制、作用域管理、高阶函数应用、装饰器模式、函数式编程工具及递归实现,通过代码示例解析核心概念,提供实用的开发实践建议。

《深浅函数定义与用法汇总.doc》
将本文以doc文档格式下载到电脑,方便收藏和打印
推荐度:
点击下载文档