Python 函数的艺术 (Functions)

这篇笔记将带你深入理解 Python 的核心------函数。函数不仅能减少重复代码,还能让你的程序结构清晰、易于维护。


🎨 Python 函数的艺术 (Functions) 学习笔记

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。


1. 函数的基础语法

使用 def 关键字来定义函数。

python 复制代码
def greet(name):
    """
    这是一个文档字符串(Docstring),用于解释函数的功能。
    打印问候语。
    """
    print(f"你好, {name}!")

# 调用函数
greet("Jojo")

2. 参数的多种玩法

Python 的参数系统非常灵活,这是它的强大之处。

① 位置参数 (Positional Arguments)

调用时必须按照定义的顺序传入。

python 复制代码
def describe_pet(kind, name):
    print(f"我有一只{kind},它的名字叫{name}")

describe_pet("小狗", "旺财")

② 默认参数 (Default Arguments)

为参数提供默认值。如果调用时不传,则使用默认值。

python 复制代码
def greet(name, msg="早上好"):
    print(f"嘿 {name}, {msg}")

greet("Alice")           # 嘿 Alice, 早上好
greet("Bob", "晚安")      # 嘿 Bob, 晚安

③ 关键字参数 (Keyword Arguments)

通过 参数名=值 的形式调用,顺序可以颠倒。

python 复制代码
describe_pet(name="大白", kind="猫")

④ 可变参数 (神奇的 *args**kwargs)

当你不知道会传入多少个参数时:

  • *args : 接收任意数量的位置参数,打包成一个元组 (tuple)
  • **kwargs : 接收任意数量的关键字参数,打包成一个字典 (dict)
python 复制代码
def make_pizza(size, *toppings, **info):
    print(f"制作一个 {size} 寸的披萨,配料有: {toppings}")
    print(f"订单信息: {info}")

make_pizza(12, "芝士", "香肠", "蘑菇", customer="张三", address="北京")

3. 返回值 (Return Value)

函数不仅可以执行操作,还可以返回结果。

  • 使用 return 语句。
  • 如果没写 return,函数默认返回 None
  • 技巧:Python 可以返回多个值(本质上是返回一个元组)。
python 复制代码
def get_sum_and_avg(scores):
    s = sum(scores)
    a = s / len(scores)
    return s, a  # 返回多个值

total, avg = get_sum_and_avg([80, 90, 100])

4. 变量的作用域 (Scope)

  • 局部变量: 在函数内部定义的变量,外部无法访问。
  • 全局变量: 在函数外部定义的变量,函数内部可以读取。
  • global 关键字 : 如果想在函数内部修改 全局变量,需要使用 global(慎用!)。

5. 匿名函数 (Lambda)

对于只有一行逻辑的简单函数,可以使用 lambda。 语法:lambda 参数: 表达式

python 复制代码
# 计算平方的匿名函数
square = lambda x: x**2
print(square(5))  # 25

# 在排序中使用
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
pairs.sort(key=lambda pair: pair[1]) # 按字母顺序排序

6. 函数编写的"艺术"准则 (Best Practices)

  1. 单一职责原则:一个函数只做一件事。如果一个函数太长,尝试拆分它。
  2. 不要重复自己 (DRY - Don't Repeat Yourself):如果你发现自己在写重复的代码,就把它们封装成函数。
  3. 命名规范 :使用 snake_case(小写字母加下划线),如 calculate_total_price
  4. 善用 Docstring:哪怕是写给自己看,也要写清楚函数是干什么的,参数代表什么。
  5. 避免副作用:尽量不要在函数内部修改全局变量,这会让程序变得难以预测。
相关推荐
兵慌码乱8 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot9 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海14 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱16 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽21 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码21 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵1 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio2 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663672 天前
使用 Python 从零创建 Word 文档
python