news 2025/12/26 13:24:47

面向所有人的Python编程——函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面向所有人的Python编程——函数

🎯 函数的核心理念:存储与重用

📌 核心原则:DRY(Don't Repeat Yourself)

  • 避免重复:相同的代码只写一次,多次使用

  • 提高效率:减少代码量,便于维护和更新

  • 增强可读性:将复杂逻辑封装为有意义的名称

🔧 函数的基本概念

📖 函数定义

python

def function_name(parameters): """文档字符串(可选,但推荐)""" # 函数体代码 return result # 可选,没有return则返回None

🎮 函数调用过程

  1. 定义阶段:告诉Python记住这个函数,但不执行

  2. 调用阶段:执行函数体中的代码

  3. 返回阶段:回到调用处继续执行后续代码

python

def greet(): # 1. 定义函数(不执行) print("Hello!") greet() # 2. 调用函数(执行) print("World") # 3. 继续执行 # 输出: Hello! World

🔄 函数执行流程

📍 调用堆栈可视化

text

主程序执行 → 遇到函数调用 → 暂停主程序 ↓ 进入函数执行 → 执行函数体代码 ↓ 函数返回 → 回到主程序暂停处 ↓ 继续执行主程序

💡 关键理解

函数调用就像是暂时暂停当前操作,等待函数返回一个值来替换调用位置

📚 内置函数(Built-in Functions)

🛠️ 常用内置函数示例

函数描述示例
print()输出内容print("Hello")
input()获取用户输入name = input("Name? ")
len()获取长度len("Hello")5
type()获取类型type(42)<class 'int'>
int()转换为整数int("42")42
float()转换为浮点数float("3.14")3.14
str()转换为字符串str(100)'100'
max()返回最大值max(1, 5, 3)5
min()返回最小值min(1, 5, 3)1
sum()求和sum([1, 2, 3])6
sorted()排序sorted([3, 1, 2])[1, 2, 3]
range()生成序列list(range(3))[0, 1, 2]

🎨 函数输入-处理-输出模型

text

输入(参数) → 函数(处理) → 输出(返回值)

🎪 自定义函数

📝 定义与调用示例

python

# 定义函数 def greet(name): # name是参数 """向指定的人问好""" print(f"Hello, {name}!") # 调用函数 greet("Alice") # "Alice"是参数值 greet("Bob") # "Bob"是参数值 # 输出: # Hello, Alice! # Hello, Bob!

🔍 参数 vs 参数值

术语定义位置示例
参数(Parameter)函数定义时接收输入的变量函数定义括号内def func(param):
参数值(Argument)调用函数时传入的具体值函数调用括号内func(value)

🍰 类比理解

参数:像是咖啡机的咖啡粉槽(等待接收)
参数值:像是实际放入的咖啡粉(具体内容)

📤 返回值(Return Value)

🔄 返回值的作用

  1. 停止函数执行:遇到return立即结束函数

  2. 传递结果:将计算结果返回给调用者

python

def add(a, b): """计算两个数的和""" result = a + b return result # 1. 停止函数 2. 返回result的值 # 调用并接收返回值 sum_result = add(3, 5) # add(3, 5) 被替换为 8 print(sum_result) # 输出: 8

📊 返回值流程

python

def double(x): return x * 2 # 调用过程: # 1. 执行 double(5) # 2. double函数返回 10 # 3. 10 替换掉 double(5) # 4. y 被赋值为 10 y = double(5)

⚪ 无返回值函数

📭 None类型

  • 无return语句:函数默认返回None

  • 有return无值returnreturn None

  • 作用:执行操作但不返回具体结果

python

# 无返回值函数(执行操作) def print_welcome(name): print(f"Welcome, {name}!") # 隐式返回 None # 有返回值函数(计算结果) def calculate_total(price, quantity): total = price * quantity return total # 返回计算结果 # 使用示例 print_welcome("Alice") # 只执行操作,不接收返回值 result = calculate_total(10, 3) # 接收返回值 print(f"Total: ${result}")

🏗️ 函数设计实践

1. 带参数和返回值的函数

python

def calculate_area(width, height): """计算矩形面积""" area = width * height return area # 使用 room_area = calculate_area(5, 4) print(f"房间面积: {room_area}平方米")

2. 多语言问候函数

python

def greet(lang): """根据语言返回问候语""" if lang == 'es': # 西班牙语 return 'Hola' elif lang == 'fr': # 法语 return 'Bonjour' elif lang == 'cn': # 中文 return '你好' else: # 默认英语 return 'Hello' # 使用 print(greet('es')) # Hola print(greet('fr')) # Bonjour print(greet('en')) # Hello

3. 组合多个函数

python

def get_rectangle_area(width, height): """计算矩形面积""" return width * height def get_triangle_area(base, height): """计算三角形面积""" return 0.5 * base * height def calculate_total_area(): """计算房间总面积(矩形+三角形)""" rect_area = get_rectangle_area(10, 5) tri_area = get_triangle_area(4, 3) total = rect_area + tri_area return total print(f"总面积: {calculate_total_area()}平方米")

🎨 为什么要使用函数?

✅ 主要优点

  1. 模块化组织

    python

    # 将代码组织成逻辑"段落" def process_data(data): """数据处理函数""" cleaned = clean_data(data) analyzed = analyze_data(cleaned) return generate_report(analyzed)
  2. 避免重复

    python

    # 重复代码(不好) print("=" * 50) print("报告标题") print("=" * 50) # ... 很多代码 ... print("=" * 50) print("报告结尾") print("=" * 50) # 使用函数(好) def print_separator(): print("=" * 50) print_separator() print("报告标题") print_separator()
  3. 简化复杂代码

    python

    # 复杂逻辑拆分为小函数 def validate_user_input(input_data): """验证用户输入""" if not check_format(input_data): return False if not check_length(input_data): return False if not check_content(input_data): return False return True
  4. 创建可重用库

    python

    # my_utils.py - 可以分享给其他人 def format_currency(amount): """格式化货币显示""" return f"${amount:,.2f}" def calculate_tax(price, tax_rate): """计算税额""" return price * tax_rate def generate_invoice(items, tax_rate=0.08): """生成发票""" # 使用上面的函数 pass

📋 函数使用指南

场景建议示例
重复代码提取为函数多处相同的计算逻辑
复杂逻辑拆分为多个小函数数据处理流程
特定功能创建专用函数数据验证、格式化
团队协作建立函数库共享工具函数

🐛 常见错误与调试

1. 忘记冒号

python

# 错误 def say_hello() # 缺少冒号 print("Hello") # 正确 def say_hello(): # 有冒号 print("Hello")

2. 缩进错误

python

# 错误:混用空格和Tab def my_func(): print("第一行") # 4个空格 print("第二行") # 1个Tab(不同编辑器可能不同) # 正确:统一使用4个空格 def my_func(): print("第一行") # 4个空格 print("第二行") # 4个空格

3. 参数不匹配

python

# 定义 def greet(name, age): print(f"{name} is {age} years old") # 错误调用:缺少参数 greet("Alice") # TypeError: missing 1 required argument # 正确调用 greet("Alice", 25)

4. 返回值使用错误

python

# 无返回值函数 def print_sum(a, b): print(a + b) # 没有return语句 # 错误:试图使用返回值 result = print_sum(3, 5) # result是None print(result * 2) # TypeError: 不能将None与数字相乘

💎 核心要点总结

1. 函数三要素

  • 名称:描述函数功能

  • 参数:接收输入数据

  • 返回值:输出处理结果

2. 定义与调用

  • 定义:使用def关键字,只定义不执行

  • 调用:使用函数名加括号,传入参数值

3. 返回值机制

  • 有返回值:使用return返回具体结果

  • 无返回值:默认返回None,用于执行操作

4. 设计原则

  • 单一职责:一个函数只做一件事

  • 明确命名:函数名应清晰表达功能

  • 良好注释:使用文档字符串说明用途

编程思维:函数是编程中的基本构建块。就像乐高积木一样,将小块的、专门的功能组合起来,可以构建出复杂而强大的程序。学会设计好的函数,是成为高效程序员的关键一步!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/22 2:01:08

Excalidraw呈现语音识别流程:ASR技术栈拆解

Excalidraw呈现语音识别流程&#xff1a;ASR技术栈拆解 在AI驱动的智能设备日益普及的今天&#xff0c;语音交互正成为人机沟通的核心入口。然而&#xff0c;构建一个稳定高效的自动语音识别&#xff08;ASR&#xff09;系统远非易事——它涉及音频信号处理、深度学习模型推理、…

作者头像 李华
网站建设 2025/12/22 1:59:48

Excalidraw展示知识产权布局:专利商标管理图谱

Excalidraw构建知识产权图谱&#xff1a;专利与商标的可视化管理新范式 在科技企业日益依赖创新驱动发展的今天&#xff0c;知识产权早已不再是法务部门的专属议题&#xff0c;而是贯穿研发、产品、市场和战略的核心资产。然而&#xff0c;大多数团队仍在用Excel表格或静态PPT来…

作者头像 李华
网站建设 2025/12/22 1:59:30

73、Windows 7 系统数据恢复与故障解决指南

Windows 7 系统数据恢复与故障解决指南 在使用 Windows 7 系统的过程中,我们难免会遇到各种问题,如文件丢失、系统无法正常启动或关机等。本文将为您详细介绍如何恢复文件、解决系统重启或关机问题、处理睡眠或休眠恢复失败的情况,以及如何修复计算机以确保正常启动。 1. …

作者头像 李华
网站建设 2025/12/26 6:01:05

Excalidraw展示药物研发管线:新药上市周期图解

Excalidraw展示药物研发管线&#xff1a;新药上市周期图解 在生物医药行业&#xff0c;一个新药从实验室走向患者手中&#xff0c;平均要走过超过十年的漫长旅程&#xff0c;耗资动辄数亿美元。在这条充满不确定性的征途上&#xff0c;如何让跨部门团队——从靶点研究员到临床…

作者头像 李华
网站建设 2025/12/22 1:57:26

Excalidraw呈现CLTV预测:长期价值估算路径

Excalidraw呈现CLTV预测&#xff1a;长期价值估算路径 在数据驱动决策日益深入企业核心的今天&#xff0c;一个普遍却棘手的问题浮出水面&#xff1a;为什么数据科学家构建的模型&#xff0c;业务团队总是“看不懂”&#xff1f;尤其是像客户生命周期价值&#xff08;CLTV&…

作者头像 李华
网站建设 2025/12/22 1:56:42

Excalidraw描绘信贷审批流程:金融业务建模

Excalidraw描绘信贷审批流程&#xff1a;金融业务建模 在金融机构日益依赖数字化协作的今天&#xff0c;一个常见的挑战浮出水面&#xff1a;如何让风控、产品、法务和开发团队在同一个“频道”上讨论复杂的信贷审批流程&#xff1f;传统方式往往是一堆静态PPT或Word文档来回传…

作者头像 李华