news 2026/3/22 2:32:59

Python函数基础:代码复用的艺术

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python函数基础:代码复用的艺术

Python 函数基础:代码复用的艺术
(2026 年小白友好版,从零到能写出优雅、可维护函数)

函数是 Python 中最重要的代码组织方式之一。
一句话总结它的核心价值:

把一段可重复使用的代码“封装”起来,给它起个名字,需要时直接“调用”它,而不是每次都复制粘贴。

这正是“不要重复自己(DRY)”原则最直接的体现。

1. 函数的四种基本写法对比(从最原始到现代推荐)

写法风格代码示例优点缺点 / 问题点推荐指数(2026)
原始重复代码每次都写print("欢迎", name)简单改一处要改多处,易出错★☆☆☆☆
基本 def 函数def greet(name): print("欢迎", name)初步复用参数类型不清晰,易传错★★★☆☆
默认值 + 关键字def greet(name, greeting="欢迎")调用更灵活可变默认值陷阱★★★★☆
类型提示(现代)def greet(name: str, greeting: str = "欢迎") -> None:可读性强、IDE 提示好、静态检查友好稍显冗长(但值得)★★★★★

2. 函数定义完整模板(2026 推荐写法)

def函数名(参数1:类型,参数2:类型=默认值,*args,**kwargs)->返回类型:""" 函数的文档字符串(docstring) 第一行:一句话概括功能 后续:详细说明每个参数、返回值、可能抛出的异常、用法示例 Args: 参数1: 说明这是什么 参数2: 可选,默认值含义 Returns: 返回什么东西,什么格式 Raises: ValueError: 当xxx时抛出 """# 函数体(实现逻辑)# 建议:函数体尽量控制在 20-30 行以内result=...returnresult

3. 参数的五大类型(带陷阱与最佳实践)

参数种类语法传递方式常见陷阱最佳实践(2026)
位置参数def add(a, b)add(3, 5)顺序错乱难读少用超过 3 个的位置参数
关键字参数add(b=5, a=3)显式指定名字优先使用,尤其参数多时
默认参数def greet(name, msg="你好")可省略可变默认值(如 list/dict)只创建一次默认值用不可变对象;可变默认值写成=None+ 内部分配
可变位置参数*argsfunc(1,2,3,4)→ args=(1,2,3,4)名字不明确常用在“接受任意数量参数”场景,如 print/log
可变关键字参数**kwargsfunc(a=1, b=2)→ kwargs={‘a’:1,‘b’:2}同上常用于“透传参数”、配置、继承等

经典默认参数陷阱演示 & 正确写法

# 错误示范(经典面试/生产事故)defadd_item(item,bag=[]):# bag 只在函数定义时创建一次!bag.append(item)returnbagprint(add_item("苹果"))# ['苹果']print(add_item("香蕉"))# ['苹果', '香蕉'] ← 惊不惊喜?!# 正确写法(2026 社区共识)defadd_item(item,bag=None):ifbagisNone:bag=[]# 每次调用都创建新列表bag.append(item)returnbagprint(add_item("苹果"))# ['苹果']print(add_item("香蕉"))# ['香蕉'] ← 正确!

4. 返回值常见模式(不止 return 一个值)

# 1. 返回单个值(最常见)defsquare(n:int)->int:returnn*n# 2. 返回多个值(其实是返回 tuple,可解包)defget_user_info()->tuple[str,int,str]:return"Alice",28,"Beijing"name,age,city=get_user_info()# 推荐写法info=get_user_info()# 也可以整体接收# 3. 返回 None(明确什么都不返回)deflog(message:str)->None:print(f"[LOG]{message}")# 4. 早期返回(guard clause 写法,更清晰)defdivide(a:float,b:float)->float|None:ifb==0:print("除数不能为0")returnNonereturna/b

5. 作用域与 LEGB 规则(面试必考)

x=100# Globaldefouter():x=50# Enclosing( nonlocal 可修改这个)definner():# x = 10 # Local(如果定义了就是这个)nonlocalx# 声明要修改 outer 的 xx=20print(x)# 20inner()print(x)# 20(被修改了)outer()print(x)# 100(全局没变)

6. 实战:写出高质量函数的 10 条 checklist(2026 推荐)

  1. 函数名清晰(动词+名词,如calculate_total_price
  2. 参数尽量少(≤4 个为佳,多了考虑拆函数或用类/配置对象)
  3. 类型提示全部写上(尤其库/团队项目)
  4. 写规范 docstring(Google/Numpy 风格都行)
  5. 默认参数用不可变对象或 None+内部判断
  6. 函数体控制在 20–30 行以内(太长就拆)
  7. 单一职责(一个函数只做一件事)
  8. 优先早期返回(guard clause)
  9. 异常处理明确(raise 或 return 错误码)
  10. 有单元测试(哪怕最简单的 assert)

7. 小练习(建议现在敲代码)

  1. 写一个函数safe_divide(a, b),处理除零返回 None 并打印警告
  2. 写一个函数print_info(**kwargs),能接受任意键值对并美观打印
  3. 写一个带默认值的日志函数log(msg, level="INFO")
  4. 实现一个求多个数平均值的函数average(*numbers)

函数是 Python 编程的“最小复用单元”。
掌握了函数,你就从“写脚本”真正迈向“写程序”。

有哪一部分还想再深入?
比如:

  • 装饰器入门
  • lambda + 高阶函数
  • 闭包与 nonlocal
  • 类型提示 + TypedDict / dataclass
  • 函数式编程小技巧(map/filter/reduce)

告诉我,我继续给你展开~

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

BERT模型冷启动问题怎么破?预加载机制部署优化

BERT模型冷启动问题怎么破?预加载机制部署优化 1. BERT 智能语义填空服务 你有没有遇到过这样的场景:写文章时卡在一个词上,明明知道意思却想不起准确表达?或者检查文案时怀疑某个成语用得不对,但又拿不准该怎么改&a…

作者头像 李华
网站建设 2026/3/19 18:44:12

【Java开发避坑宝典】:Maven导入本地Jar包的3个黄金法则

第一章:Maven导入本地Jar包的核心挑战 在Java项目开发中,依赖管理是构建系统的核心环节。尽管Maven通过中央仓库简化了大多数第三方库的引入,但当需要使用未发布到公共仓库的私有或内部Jar包时,开发者便面临如何正确导入本地Jar包…

作者头像 李华
网站建设 2026/3/15 19:53:53

Z-Image-Turbo部署教程:支持Python调用的高性能文生图方案

Z-Image-Turbo部署教程:支持Python调用的高性能文生图方案 你是否还在为文生图模型下载慢、部署复杂、显存不足而烦恼?今天介绍的这套 Z-Image-Turbo 高性能文生图环境,专为开发者和AI创作者打造——预置完整模型权重、无需手动下载、启动即…

作者头像 李华
网站建设 2026/3/15 19:53:52

两个老祖写的神奇算法,统治了全世界!

作为普通人,你在浏览网页的时候,你并不会意识到,服务器发给你的网页,其实都是压缩过的。如果你像程序员一样,在浏览器中按一下F12,就能找到这样的东西:它的意思是:为了节省带宽提供网…

作者头像 李华
网站建设 2026/3/21 5:52:33

Open-AutoGLM应用更新自动化:版本检查执行代理部署

Open-AutoGLM应用更新自动化:版本检查执行代理部署 1. Open-AutoGLM – 智谱开源的手机端AI Agent框架 你有没有想过,让AI帮你操作手机?不是简单的语音助手,而是真正能“看懂”屏幕、理解界面、自动点击、滑动、输入文字&#x…

作者头像 李华
网站建设 2026/3/15 19:53:50

全国首部RWA全流程标准正式启动

来源 | 智合标准化建设 作者 | 智合标准中心 RWA在将实体资产引入区块链的过程中,因涉及底层资产真实性、技术不确定性、资金跨境流动等复杂因素,极易产生洗钱、集资诈骗、违规跨境转移资金等违法风险。因此合规监管是RWA项目能否启动、存续和发展的生命…

作者头像 李华