当前位置:首页 > Python > 正文

Python3函数完全指南:从基础到高级用法详解

Python3函数完全指南

函数是Python编程的核心概念之一。本教程将带你全面了解Python3函数的定义、参数传递、作用域以及高级用法。

教程内容概览:

  • 函数定义与调用
  • 参数类型:位置参数、关键字参数、默认参数
  • 返回值与多返回值
  • 变量作用域解析
  • 递归函数详解
  • Lambda表达式应用
  • 函数式编程概念

一、函数定义与调用

函数是组织好的、可重复使用的代码块,用于执行特定任务。

基本函数定义语法:

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

示例:简单函数

# 定义函数
def greet(name):
    """返回问候语"""
    return f"你好, {name}!"

# 调用函数
print(greet("张三"))  # 输出: 你好, 张三!

二、函数参数详解

Python函数支持多种参数传递方式:

1. 位置参数

最常见的参数传递方式,按顺序传递参数

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

print(power(2, 3))  # 8

2. 默认参数

为参数提供默认值,调用时可省略

def greet(name, greeting="你好"):
    return f"{greeting}, {name}!"

print(greet("李四"))  # 你好, 李四!
print(greet("王五", "早上好"))  # 早上好, 王五!

3. 关键字参数

按参数名传递值,顺序不重要

def person_info(name, age, city):
    return f"{name}, {age}岁, 来自{city}"

print(person_info(age=25, city="北京", name="赵六"))

4. 可变参数

*args接收任意数量的位置参数

**kwargs接收任意数量的关键字参数

def sum_all(*numbers):
    total = 0
    for num in numbers:
        total += num
    return total

print(sum_all(1, 2, 3))  # 6
print(sum_all(4, 5, 6, 7))  # 22

def print_info(**info):
    for key, value in info.items():
        print(f"{key}: {value}")

print_info(name="张三", age=30, city="上海")

三、返回值与多返回值

Python函数可以返回多个值(实际上是返回元组)

def min_max(numbers):
    return min(numbers), max(numbers)

nums = [4, 2, 9, 7, 5]
minimum, maximum = min_max(nums)
print(f"最小值: {minimum}, 最大值: {maximum}")

四、变量作用域

Python有四种作用域:局部(Local)、闭包(Enclosing)、全局(Global)、内置(Built-in)

作用域示例:

global_var = "全局变量"

def outer_function():
    enclosing_var = "闭包变量"
    
    def inner_function():
        local_var = "局部变量"
        # 可以访问所有作用域变量
        print(global_var)      # 全局变量
        print(enclosing_var)   # 闭包变量
        print(local_var)       # 局部变量
    
    inner_function()
    
    # 尝试访问内部函数变量会出错
    # print(local_var)  # NameError

outer_function()

五、递归函数

递归函数是调用自身的函数,需要设置终止条件

经典示例:阶乘计算

def factorial(n):
    # 终止条件
    if n == 0 or n == 1:
        return 1
    # 递归调用
    return n * factorial(n-1)

print(factorial(5))  # 120

斐波那契数列

def fibonacci(n):
    if n <= 0:
        return []
    elif n == 1:
        return [0]
    elif n == 2:
        return [0, 1]
    
    fib_seq = fibonacci(n-1)
    fib_seq.append(fib_seq[-1] + fib_seq[-2])
    return fib_seq

print(fibonacci(10))  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

六、Lambda表达式

Lambda用于创建小型匿名函数,适合简单操作

基本语法

lambda arguments: expression

示例:

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

与高阶函数配合

在map(), filter()等函数中使用

# 使用map()将平方函数应用到列表
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # [1, 4, 9, 16]

# 使用filter()过滤偶数
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # [2, 4]

七、函数式编程工具

Python提供了一些函数式编程工具:

1. map()函数

# 将字符串转换为大写
words = ["hello", "world", "python"]
upper_words = list(map(str.upper, words))
print(upper_words)  # ['HELLO', 'WORLD', 'PYTHON']

2. filter()函数

# 过滤出长度大于5的单词
long_words = list(filter(lambda word: len(word) > 5, words))
print(long_words)  # ['python']

3. reduce()函数

from functools import reduce

# 计算列表元素的乘积
numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 24

函数最佳实践

  • ✔️ 函数应该保持简洁,专注于单一功能
  • ✔️ 使用描述性的函数名和参数名
  • ✔️ 为函数添加文档字符串说明功能
  • ✔️ 避免使用全局变量修改状态
  • ✔️ 函数参数数量不宜过多(通常不超过5个)
  • ✔️ 优先使用返回值而不是修改输入参数

注意: Python函数是"一等公民",这意味着它们可以像其他对象一样被传递、赋值和返回。这个特性使得Python非常适合函数式编程风格。

本教程涵盖了Python函数的核心概念,希望对你掌握Python编程有帮助!

发表评论