Python3 函数详解:从基础到高级

引言

函数是 Python 编程中最重要的概念之一。它不仅可以提高代码的复用性,还能让程序结构更清晰、更易于维护。本文将详细介绍 Python3 中函数的使用方法,包括函数定义、参数传递、作用域、装饰器等内容,帮助你全面掌握 Python 函数的核心知识。


目录

  1. 函数基础
    • 1.1 函数的定义与调用
    • 1.2 返回值
  2. 函数参数
    • 2.1 位置参数
    • 2.2 默认参数
    • 2.3 可变参数
    • 2.4 关键字参数
  3. 函数作用域
    • 3.1 局部变量与全局变量
    • 3.2 globalnonlocal 关键字
  4. 高级函数特性
    • 4.1 匿名函数(Lambda)
    • 4.2 高阶函数
    • 4.3 闭包
  5. 装饰器
    • 5.1 装饰器的基本概念
    • 5.2 自定义装饰器
    • 5.3 带参数的装饰器
  6. 总结

1. 函数基础

1.1 函数的定义与调用

在 Python 中,使用 def 关键字定义函数。函数定义后,可以通过函数名加括号的方式调用。

python 复制代码
# 定义一个简单的函数
def greet(name):
    print(f"Hello, {name}!")

# 调用函数
greet("Alice")  # 输出:Hello, Alice!

1.2 返回值

函数可以通过 return 语句返回一个值。如果没有 return 语句,函数默认返回 None

python 复制代码
def add(a, b):
    return a + b

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

2. 函数参数

Python 函数支持多种参数传递方式,包括位置参数、默认参数、可变参数和关键字参数。

2.1 位置参数

位置参数是按照定义时的顺序传递的参数。

python 复制代码
def power(base, exponent):
    return base ** exponent

print(power(2, 3))  # 输出:8

2.2 默认参数

默认参数是在定义函数时为参数指定默认值。调用函数时,如果没有传递该参数,则使用默认值。

python 复制代码
def greet(name, message="Hello"):
    print(f"{message}, {name}!")

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

2.3 可变参数

可变参数允许函数接受任意数量的位置参数,使用 *args 表示。

python 复制代码
def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3))  # 输出:6
print(sum_all(1, 2, 3, 4, 5))  # 输出:15

2.4 关键字参数

关键字参数允许函数接受任意数量的关键字参数,使用 **kwargs 表示。

python 复制代码
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=25, city="New York")
# 输出:
# name: Alice
# age: 25
# city: New York

3. 函数作用域

3.1 局部变量与全局变量

  • 局部变量:在函数内部定义的变量,只能在函数内部访问。
  • 全局变量:在函数外部定义的变量,可以在整个程序中使用。
python 复制代码
x = 10  # 全局变量

def my_func():
    y = 5  # 局部变量
    print(x + y)

my_func()  # 输出:15
print(y)  # 报错:NameError,y 是局部变量

3.2 globalnonlocal 关键字

  • global:用于在函数内部修改全局变量。
  • nonlocal:用于在嵌套函数中修改外层函数的变量。
python 复制代码
# global 示例
x = 10

def modify_global():
    global x
    x = 20

modify_global()
print(x)  # 输出:20

# nonlocal 示例
def outer():
    x = 10
    def inner():
        nonlocal x
        x = 20
    inner()
    print(x)  # 输出:20

outer()

4. 高级函数特性

4.1 匿名函数(Lambda)

Lambda 是一种匿名函数,适合定义简单的单行函数。

python 复制代码
# 普通函数
def add(a, b):
    return a + b

# Lambda 表达式
add_lambda = lambda a, b: a + b

print(add(3, 5))        # 输出:8
print(add_lambda(3, 5)) # 输出:8

4.2 高阶函数

高阶函数是指接受函数作为参数或返回函数的函数。

python 复制代码
# 高阶函数示例
def apply_func(func, x, y):
    return func(x, y)

result = apply_func(lambda a, b: a * b, 3, 5)
print(result)  # 输出:15

4.3 闭包

闭包是指在一个函数内部定义另一个函数,并且内部函数引用了外部函数的变量。

python 复制代码
def outer(x):
    def inner(y):
        return x + y
    return inner

closure = outer(10)
print(closure(5))  # 输出:15

5. 装饰器

5.1 装饰器的基本概念

装饰器是一种用于修改函数或类行为的工具。它本质上是一个高阶函数,接受一个函数作为参数并返回一个新的函数。

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!
# 函数执行后

5.2 自定义装饰器

装饰器可以用于日志记录、权限校验、性能测试等场景。

python 复制代码
# 记录函数执行时间的装饰器
import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"{func.__name__} 执行时间:{end_time - start_time:.2f}秒")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(2)

slow_function()  # 输出:slow_function 执行时间:2.00秒

5.3 带参数的装饰器

装饰器本身也可以接受参数。

python 复制代码
# 带参数的装饰器
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!

6. 总结

本文详细介绍了 Python3 中函数的使用方法,包括函数定义、参数传递、作用域、高级特性以及装饰器。以下是本文的要点回顾:

  1. 函数基础 :使用 def 定义函数,通过 return 返回值。
  2. 函数参数:支持位置参数、默认参数、可变参数和关键字参数。
  3. 函数作用域 :局部变量与全局变量,globalnonlocal 关键字。
  4. 高级特性:Lambda 表达式、高阶函数、闭包。
  5. 装饰器:用于增强函数功能,支持自定义和带参数的装饰器。

掌握这些知识后,你将能够编写更高效、更灵活的 Python 代码。希望本文对你的学习和工作有所帮助!


参考资料:


相关推荐
烛阴10 分钟前
JavaScript 函数对象与 NFE:你必须知道的秘密武器!
前端·javascript
px521334412 分钟前
Solder leakage problems and improvement strategies in electronics manufacturing
java·前端·数据库·pcb工艺
eli96014 分钟前
node-ddk,electron 开发组件
前端·javascript·electron·node.js·js
全宝29 分钟前
🔥一个有质感的拟态开关
前端·css·weui
老K(郭云开)34 分钟前
最新版Chrome浏览器加载ActiveX控件技术--allWebPlugin中间件一键部署浏览器扩展
前端·javascript·chrome·中间件·edge
老K(郭云开)35 分钟前
allWebPlugin中间件自动适应Web系统多层iframe嵌套
前端·javascript·chrome·中间件
银之夏雪1 小时前
Vue 3 vs Vue 2:深入解析从性能优化到源码层面的进化
前端·vue.js·性能优化
还是鼠鼠1 小时前
Node.js 的模块作用域和 module 对象详细介绍
前端·javascript·vscode·node.js·web
拉不动的猪1 小时前
刷刷题36(uniapp高级实际项目问题-1)
前端·javascript·面试
-代号95271 小时前
【CSS】一、基础选择器
前端·css