2026-09-23
Python 入门系列(八):函数——代码的积木
函数是能重复使用的投币机器:参数进、返回值出。学习 def 定义、return 与 print 的区别、默认参数、作用域,完成三层积木素数练习。
函数:代码的积木
预计学习时间:60 分钟 · 本系列第 8 / 10 课
一、同样的代码,为什么要写三遍?
程序里到处是重复:算 BMI、发验证码、格式化时间……把一段常用的代码打包起来,起个名字,以后随叫随到——这就是函数(Function)。其实你早就在用了:print()、input()、len() 都是别人打包好的函数。
**核心比喻:函数是一台"投币机器"。**从投币口扔进原料(参数),机器内部加工,从出口吐出成品(返回值)。你不需要知道内部怎么转齿轮,只要会用就行。
weight=60 ──► ┌──────────────────────┐ ──► return 21.6
(参数/原料) │ def calc_bmi(...) │ (返回值/成品)
│ 内部加工,外面不用管 │
└──────────────────────┘
二、定义与调用
def greet(name): # def 定义;name 是参数
print("你好," + name + "!")
print("欢迎来到 Python 世界")
greet("老魏") # 调用:名字 + 括号 + 参数
greet("小明") # 同一台机器,喂不同的料
你好,老魏!
欢迎来到 Python 世界
你好,小明!
欢迎来到 Python 世界
定义不执行,调用才执行。def 只是"造机器",必须写 greet(...) 机器才转起来。
三、返回值:把结果交出来
print 只是"喊一嗓子",return 才是把结果交还给调用者,可以接着用:
def calc_bmi(weight, height):
bmi = weight / (height * height)
return round(bmi, 1) # 把结果交出去
result = calc_bmi(60, 1.7) # 返回值存进变量
if result >= 24:
print(result, "偏胖")
else:
print(result, "正常")
20.8 正常
print vs return:函数里只 print 不 return,等于机器光响不吐货——在外面拿不到结果(拿到的是 None)。要参与后续计算,一定用 return。
四、默认参数:让调用更省心
def introduce(name, hobby="写代码"): # hobby 有默认值
print(f"{name} 爱好是 {hobby}")
introduce("老魏") # 不传 → 用默认值
introduce("小李", "打篮球") # 传了 → 用传入的
老魏 爱好是 写代码
小李 爱好是 打篮球
五、作用域:盒子里的变量,外面看不见
def test():
inner = 42 # 局部变量:只在函数内部有效
print(inner)
test()
print(inner) # 报 NameError!外面拿不到
total = 100 # 全局变量:到处都能"读"
def show():
print(total) # 能读
好习惯:函数需要什么,通过参数传进去;产出什么,通过 return 交出来。少依赖全局变量,函数才像积木一样哪里都能拼。
六、实战:把前面的代码"积木化"
def grade_level(score):
if score >= 90: return "优秀"
elif score >= 80: return "良好"
elif score >= 60: return "及格"
return "不及格"
def class_report(scores): # 接收一个字典
for name, s in scores.items(): # 积木拼积木:调用上面的函数
print(f"{name}: {s} 分 [{grade_level(s)}]")
class_report({"小明": 92, "小红": 85, "小刚": 45})
小明: 92 分 [优秀]
小红: 85 分 [良好]
小刚: 45 分 [不及格]
七、避坑指南
- ❌ 忘了调用括号:
greet只是指机器的名字,greet()才是开机 - ❌ 函数体内修改参数列表(如 append)会影响外面的原列表——列表参数传的是"本体"
- ❌ 忘写 return 却在外面用返回值 → 得到
None,后续计算莫名报错
八、动手练习
练习:写三个函数——is_prime(n) 判断素数、primes_in(a, b) 找出范围内的素数(内部调用第一个函数)、main() 打印 2~50 的所有素数。
def is_prime(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False # 能被整除就不是素数
return True
def primes_in(a, b):
result = []
for n in range(a, b + 1):
if is_prime(n):
result.append(n)
return result
def main():
print(primes_in(2, 50))
main()
体会一下:三个函数像三层积木,每层职责单一,组合起来完成任务——这就是函数思维。
下一课预告:处理真实世界的数据——字符串与文件。