Python函数全解析

Python 函数详解

函数是 Python 编程的核心,用于封装可重用的代码块。以下是函数的全面解析:


1. 函数定义

使用 def 关键字定义函数:

python 复制代码
def greet(name):  # name 是参数
    """打印问候语(文档字符串)"""
    print(f"Hello, {name}!")

2. 函数调用

通过函数名和参数调用:

python 复制代码
greet("Alice")  # 输出: Hello, Alice!

3. 参数类型
类型 说明 示例
位置参数 按顺序传递 func(a, b)
关键字参数 指定参数名传递 func(b=2, a=1)
默认参数 定义时指定默认值 def func(a=0):
可变参数 接收任意数量参数 def func(*args):
关键字可变参数 接收任意键值对 def func(**kwargs):

4. 返回值

用 return 返回结果(默认返回 None):

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

result = add(3, 5)  # result = 8

5. 作用域
  • 局部变量:函数内定义的变量(仅在函数内有效)
  • 全局变量 :函数外定义的变量(需用 global 在函数内修改)
python 复制代码
x = 10  # 全局变量

def modify():
    global x
    x = 20  # 修改全局变量
    y = 5   # 局部变量

modify()
print(x)  # 输出: 20
print(y)  # 报错: y 未定义

6. Lambda 函数

匿名函数,用于简单操作:

python 复制代码
square = lambda x: x ** 2
print(square(4))  # 输出: 16

7. 递归函数

函数调用自身:

python 复制代码
def factorial(n):
    return 1 if n == 0 else n * factorial(n-1)

print(factorial(5))  # 输出: 120

8. 函数注解

添加类型提示(Python 3.5+):

python 复制代码
def multiply(a: int, b: int) -> int:
    return a * b

9. 闭包

内部函数记住外部作用域的变量:

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

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

10. 装饰器

修改函数行为(不改变原函数代码):

python 复制代码
def logger(func):
    def wrapper(*args):
        print(f"调用函数: {func.__name__}")
        return func(*args)
    return wrapper

@logger
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Bob")
# 输出: 
# 调用函数: say_hello
# Hello, Bob!

11. 生成器函数

用 yield 返回迭代器:

python 复制代码
def count_down(n):
    while n > 0:
        yield n
        n -= 1

for num in count_down(3):
    print(num)  # 输出: 3, 2, 1

关键特性总结
特性 说明
可重用性 避免重复代码
模块化 将复杂任务分解为小函数
参数灵活 支持多种参数传递方式
作用域隔离 局部变量不影响全局环境
一等公民 函数可作为参数传递、赋值给变量或作为返回值

掌握这些概念,能显著提升代码的清晰度和维护性!

相关推荐
1024奇点7 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
实名上网宋凯宣7 小时前
Django
后端·python·django
Warren2Lynch8 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
如若1239 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python
Knight_AL9 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing039 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by2099910 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河10 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
视觉小萌新10 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
IT召唤狮10 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php