游乐游手机版
首页/AI教程/文章详情

初级程序员实战教程第四篇实战项目解析

时间:2026-05-29 07:48
七 函数:模块化编程的核心 在编程领域中,函数是最基础且至关重要的概念之一。其本质作用在于“封装”——将一段逻辑独立出来,使代码更易阅读、复用性更强,是构建高质量程序的关键。 7 1 函数的定义与调用(Python基础) 下面是一个最简单的Python函数示例:定义函数并包含文档字符串,随后执行调

七. 函数:模块化编程的核心

在编程领域中,函数是最基础且至关重要的概念之一。其本质作用在于“封装”——将一段逻辑独立出来,使代码更易阅读、复用性更强,是构建高质量程序的关键。

7.1 函数的定义与调用(Python基础)

初级程序员实战教程(四)

下面是一个最简单的Python函数示例:定义函数并包含文档字符串,随后执行调用。整个过程非常直观易懂。

def greet(name):"""显示问候语(文档字符串)"""print(f"你好,{name}")greet("小明") # 调用# 带返回值def add(a, b):return a + bresult = add(3, 5)

7.2 函数参数类型详解(位置、默认、可变参数)

参数机制是Python函数的核心特性之一,掌握多种参数用法能避免常见错误,提升代码灵活性。

# 1. 位置参数(必须按顺序)def introduce(name, age):print(f"{name} {age}岁")introduce("李华", 18)# 2. 关键字参数(可乱序)introduce(age=20, name="王芳")# 3. 默认参数(必须放在位置参数之后)def power(base, exponent=2):return base ** exponentprint(power(3)) # 9print(power(3, 3)) # 27# 这里要特别注意:默认参数不能用可变对象(比如列表)def add_item(item, lst=[]): # 错误示范,lst会在函数定义时创建一次lst.append(item)return lstprint(add_item(1)) # [1]print(add_item(2)) # [1,2] 并不是 [2],因为共享同一个列表# 正确做法:用None替代def add_item(item, lst=None):if lst is None:lst = []lst.append(item)return lst# 4. 可变位置参数 *args(接收成元组)def sum_all(*numbers):return sum(numbers)print(sum_all(1,2,3,4)) # 10# 5. 可变关键字参数 **kwargs(接收成字典)def print_info(**info):for k, v in info.items():print(f"{k}: {v}")print_info(name="张三", age=25)# 6. 组合使用def func(a, b, *args, c=10, **kwargs):pass

7.3 函数返回值与变量作用域(LEGB规则)

函数可以返回一个或多个值,多个值本质上以元组形式返回。作用域方面,LEGB规则规定了变量查找顺序:优先局部,逐层向外,全局兜底。

# 多个返回值实际返回元组def min_max(lst):return min(lst), max(lst)minimum, maximum = min_max([3,1,4,2])# 作用域(LEGB规则)x = 10 # 全局变量def outer(): y = 20 # 外层变量 def inner(): z = 30 # 局部变量 nonlocal y # 声明要修改外层变量 y += 1 global x # 声明要修改全局变量 x += 1 print(x, y, z) inner()outer()

7.4 lambda 匿名函数(简洁表达式)

当函数逻辑十分简短时,使用lambda匿名函数比def更便捷。它常与sorted、filter、map等内置函数配合使用。

# 简单的单表达式函数square = lambda x: x ** 2print(square(5)) # 25# 常与sorted、filter、map配合students = [("张三", 85), ("李四", 92), ("王五", 78)]students_sorted = sorted(students, key=lambda s: s[1], reverse=True)print(students_sorted)# 按成绩降序# filter 过滤numbers = [1,2,3,4,5,6]evens = list(filter(lambda x: x%2==0, numbers))# map 映射squared = list(map(lambda x: x**2, numbers))

7.5 递归函数简介(深度限制与阶乘示例)

递归即函数调用自身,适用于阶乘、树遍历等场景。但需注意递归深度限制,Python默认约为1000层。

# 计算阶乘def factorial(n):if n == 0:return 1else:return n * factorial(n-1)print(factorial(5)) # 120# 注意递归深度限制(默认1000)

7.6 装饰器入门(为函数动态添加功能)

装饰器本质上是一个返回函数的函数,常用于在不修改原函数逻辑的前提下添加额外功能,例如计算执行耗时。

def timer(func):import timedef wrapper(*args, **kwargs):start = time.time()result = func(*args, **kwargs)end = time.time()print(f"{func.__name__} 耗时 {end-start:.4f}秒")return resultreturn wrapper@timerdef slow_function():import timetime.sleep(1)return "完成"slow_function()

八. 模块与包(代码组织与复用)

8.1 模块导入方式(多种方法对比)

将代码拆分至不同文件中复用的机制称为模块。Python提供了多种导入方式,推荐尽量明确导入内容,避免使用from os import *这种通配写法以防止命名冲突。

# 方式1: 导入整个模块import mathprint(math.sqrt(16))# 方式2: 导入特定函数from random import randint, choiceprint(randint(1,10))# 方式3: 导入所有(不推荐,可能命名冲突)from os import *# 方式4: 起别名import datetime as dtnow = dt.datetime.now()

8.2 if __name__ == "__main__" 的作用(模块安全执行)

这段条件判断的作用是:当该文件作为主程序直接运行时执行指定代码,而被其他模块导入时不执行。撰写模块时添加此语句可提升安全性与可测试性。

创建 mymodule.py:

def hello():print("Hello from module")if __name__ == "__main__":# 当直接运行此文件时执行,被导入时不执行hello()

8.3 创建自己的包(模块文件夹结构)

将多个模块放入一个文件夹,并在其中放置__init__.py文件,即可构成一个包。该文件可以为空,但必须存在以标识包。

mypackage/ __init__.py # 可以为空,但必须存在 module1.py module2.py

导入时使用:from mypackage import module1

8.4 安装第三方库(pip常用命令)

Python的强大生态离不开第三方库,pip是最常用的包管理工具。掌握几个基本命令即可满足日常依赖管理需求。

pip install requests # 安装pip list # 列出已安装pip install requests==2.28.0 # 指定版本pip freeze > requirements.txt # 导出依赖

来源:https://developer.aliyun.com/article/1737980
上一篇数字化变革浪潮开启新时代 下一篇酷宣AI模板一键生成绝美文章
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
RAG四标融合企业知识资产体系四库协同GEO优化实践
AI教程 · 2026-07-01

RAG四标融合企业知识资产体系四库协同GEO优化实践

生成式AI正在彻底改写信息检索的底层逻辑。传统SEO依赖关键词堆砌和外链建设的策略,在大模型的内容采信规则下已经基本失效。取而代之的,是生成式引擎优化(GEO)。它不再关注外链数量,而是重点衡量你的知识是否结构化、证据链是否坚实、信源是否可靠——这些维度才是RAG(检索增强生成)架构真正看重的核心指

一个普通上班人分享WorkBuddy使用心得与真实体验
AI教程 · 2026-07-01

一个普通上班人分享WorkBuddy使用心得与真实体验

前言 最近我开始使用WorkBuddy——这是腾讯推出的一款AI办公工作台。差不多用了一周时间,趁印象还新鲜,把真实的使用感受记录下来,给还在犹豫的朋友做个参考。不吹不黑,只说实际体验。 初印象:不只是聊天机器人 之前用过不少AI工具,大多数就是个对话框,你问它答,答完就结束了。WorkBuddy不

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录
AI教程 · 2026-07-01

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录

先讲一个颇具戏剧性的开端。 这件事的开端颇显荒诞——有用户前来咨询,称AI Pro版的介绍中提到我们有一款“视频录制拓展”。团队全体成员都感到困惑,翻遍产品列表,发现根本不存在该组件。AI那种“一本正经胡说八道”的能力,这次确实让我们陷入尴尬。 按常理,此事到此便可结束——一句“抱歉,暂时没有这个拓

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同
AI教程 · 2026-07-01

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同

OLAP和SQL-on-Hadoop虽都使用SQL查询数据,但本质不同。SQL-on-Hadoop负责海量数据批量计算与ETL,查询速度秒级至分钟级;OLAP通过预聚合实现毫秒级多维分析,适合BI报表。两者在数据平台分工协作,前者是后厨加工,后者是前台快速服务。

GEO优化深度解析:AI偏好FAQ还是长文内容?
AI教程 · 2026-07-01

GEO优化深度解析:AI偏好FAQ还是长文内容?

在GEO优化中,AI对内容形式无统一偏好:FAQ在简单查询中引用率41%,长文在复杂查询中达58%。内容应基于用户意图选择形式,FAQ适配简单事实类问题,长文建立主题权威,两者互补而非替代。