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()

体会一下:三个函数像三层积木,每层职责单一,组合起来完成任务——这就是函数思维。

下一课预告:处理真实世界的数据——字符串与文件。

← 返回教程列表
顶部