Python基础 | 函数入门

为什么学函数?你的「代码搬砖史」该结束了
想象你是奶茶店店员
- 每次做「芋泥波波」都要重复喊「加 3 勺芋泥、2 勺波波、七分糖」(重复劳动)
- 后来你把步骤写成「芋泥波波 ()」,接单时直接喊名字(效率翻倍)
函数的本质:给重复代码「取名字 + 打包」,想用的时候「喊名字」,避免重复写代码。这是编程从「体力劳动」到「脑力创造」的转折点。
无参数函数:你的「一键奶茶机」
👉 场景:每天打烊前清洁设备(重复 3 个步骤)
不用函数的痛苦:
print("1. 冲洗奶盖机")
print("2. 消毒量杯")
print("3. 擦操作台") # 每天写3遍,改步骤要改3处
print("1. 冲洗奶盖机")
print("2. 消毒量杯")
print("3. 擦操作台")
用函数的快乐:
def 打烊清洁(): # def = define,定义一个叫「打烊清洁」的函数
print("1. 冲洗奶盖机")
print("2. 消毒量杯")
print("3. 擦操作台\n") # 改步骤只需改这里
# 调用2次(每天早晚班各一次)
打烊清洁() # 第1次调用
打烊清洁() # 第2次调用(代码没变,但你少写6行!)
代码拆解:
- 函数定义:
def 函数名():后接缩进的代码块 - 函数调用:直接写函数名 +
(),像启动洗衣机的「开始键」
带参数函数:你的「定制奶茶配方」
👉 场景:根据顾客需求做不同奶茶(甜度 / 小料可变)
参数 = 函数的「定制选项」:
def 做奶茶(奶茶名, 甜度="七分", 小料="珍珠"): # 括号里是参数(带默认值)
print(f"🍵 制作{奶茶名}:")
print(f"甜度:{甜度},小料:{小料}")
print("摇匀→装杯→贴标签,完成!\n")
# 调用示例(参数=实参)
做奶茶("芋泥波波", 甜度="五分", 小料="青稞") # 定制低糖版
做奶茶("葡萄冻冻", 小料="脆啵啵") # 用默认甜度(七分)
运行效果:
🍵 制作芋泥波波:
甜度:五分,小料:青稞
摇匀→装杯→贴标签,完成!
🍵 制作葡萄冻冻:
甜度:七分,小料:脆啵啵
摇匀→装杯→贴标签,完成!
新手必懂:
- 参数顺序可调:
做奶茶(奶茶名="葡萄冻冻", 小料="脆啵啵")(明确参数名更清晰) - 默认值:
甜度="七分"让调用时可省略参数(适合常用选项)
返回值函数:你的「奶茶计算器」
👉 场景:计算奶茶利润(单价 – 成本,重复计算 5 种奶茶)
返回值 = 函数的「交货」:
def 算利润(售价, 成本):
利润 = 售价 - 成本
return 利润 # 把计算结果「交出来」
# 调用函数并保存结果
芋泥波波利润 = 算利润(18, 6.5) # 11.5元
葡萄冻冻利润 = 算利润(22, 8.2) # 13.8元
print(f"今日爆款利润:芋泥波波{芋泥波波利润}元,葡萄冻冻{葡萄冻冻利润}元")
为什么需要返回值?
- 函数内部的变量(如
利润)调用后会消失,return让结果「存活」 - 类比:厨师做完菜(函数),通过窗口(return)递给服务员
实战:你的「自动祝福工具箱」
👉 场景:批量发节日祝福(姓名 / 节日可变)
def 发祝福(姓名, 节日):
return f"{姓名},{节日}快乐!记得吃{节日习俗(节日)}~"
def 节日习俗(节日): # 嵌套函数,处理细节
return {
"春节": "饺子",
"端午节": "粽子",
"中秋节": "月饼"
}.get(节日, "好吃的")
# 批量调用(搭配循环)
好友列表 = ["阿浩", "小宇", "乐乐"]
for 名字 in 好友列表:
消息 = 发祝福(名字, "端午节")
print(消息)
# 这里可对接微信接口自动发送(进阶玩法)
运行结果:
阿浩,端午节快乐!记得吃粽子~
小宇,端午节快乐!记得吃粽子~
乐乐,端午节快乐!记得吃粽子~
函数的「3 大死亡陷阱」
参数数量不匹配
def 做奶茶(奶茶名): # 定义时1个参数
做奶茶("芋泥波波", "五分甜") # ❌ 调用时传2个,报错!
# 正确:做奶茶("芋泥波波") 或 增加参数
忘记 return
def 算面积(长, 宽):
面积 = 长 * 宽 # 忘记return
结果 = 算面积(5, 3) # 结果是None(空值)
作用域错误:函数外不能直接用函数内的变量
def 做咖啡():
咖啡豆 = "哥伦比亚" # 仅在函数内有效
print(咖啡豆) # ❌ 报错:name '咖啡豆' is not defined
避坑口诀:参数数量要对齐,return 交货别忘记,变量不出函数体
写给程序员的「函数哲学」
- 越小越好:一个函数只做一件事(如
算利润()不负责打印) - 见名知意:用
发祝福()代替f1(),读代码像读说明书 - 复用为王:写函数时问自己「这个功能未来会用 3 次以上吗?」
总结:你已掌握的「偷懒魔法」
✅ 无参数函数:封装重复步骤(打烊清洁)
✅ 带参数函数:定制化执行(不同奶茶配方)
✅ 返回值函数:获取计算结果(利润、面积)
✅ 实战:用函数 + 循环批量处理任务(自动发祝福)
挑战:封装「文件重命名」函数!
功能:输入旧文件名和关键词,自动添加日期(如「报告_v2_20240601.doc」)
提示:用os.rename()和字符串拼接,封装成重命名(旧名, 关键词)
终极心法:函数是「代码的乐高块」
下次写重复代码时,默念:
「这段代码会重复 3 次以上吗?」→ 是 → 封装成函数
「这个功能未来会修改吗?」→ 是 → 封装成函数
报错急救箱:
遇到TypeError: 函数缺少1个位置参数→ 检查调用时的参数数量
遇到NameError: 名字 'xxx' 未定义→ 检查函数名拼写或是否先定义后调用