当前位置:首页>python>【Python】Day15:函数初体验——定义与调用

【Python】Day15:函数初体验——定义与调用

  • 2026-10-11 07:29:55
【Python】Day15:函数初体验——定义与调用

🎯 学习目标

  1. 理解函数的本质:打包好的代码积木,实现代码的复用与模块化
  2. 掌握函数的定义语法:def函数名、参数、返回值
  3. 理解 形参(定义时的占位符)与 实参(调用时传的具体值)的区别
  4. 掌握return的作用:返回结果并结束函数
  5. 学会编写带参数和返回值的函数,能将重复逻辑封装成函数

一、为什么需要函数?

  1. 没有函数的痛苦:重复代码
    # 计算三个人的最终成绩(平时分占30%,期末占70%)s1_final = 80 * 0.3 + 85 * 0.7s2_final = 90 * 0.3 + 75 * 0.7s3_final = 70 * 0.3 + 95 * 0.7# 如果比例改成40%和60%?要改三处!容易漏改出错。
  2. 有函数的优雅:一次定义,多次调用
    deffinal_score(daily, exam):return daily * 0.3 + exam * 0.7s1 = final_score(80, 85)s2 = final_score(90, 75)s3 = final_score(70, 95)# 比例改了?只改函数体一处即可!
  3. 函数的核心好处
    • 复用:写一次,用无数次
    • 简化:把复杂逻辑"包装"起来,外部只需关心输入输出
    • 易维护:修改逻辑只需改函数内部

二、定义和调用函数

  1. 基本语法
    def 函数名(参数1, 参数2, ...):"""文档字符串(可选,但强烈建议写)"""    函数体return 返回值
  2. 最简单的函数:无参无返回值
    defgreet():"""打印欢迎语"""    print("Hello, Python!")# 调用greet()    # Hello, Python!greet()    # Hello, Python!
  3. 带参数的函数
    defgreet_name(name):"""向指定的人打招呼"""    print(f"Hello, {name}!")greet_name("小王")   # Hello, 小王!greet_name("小李")   # Hello, 小李!
  4. 带返回值的函数
    defadd(a, b):"""返回两数之和"""return a + bresult = add(3, 5)print(result)         # 8print(add(10, 20))    # 30

三、参数:形参与实参

  1. 形参 vs 实参
    defintroduce(name, age):# name, age 是形参(形式参数,占位符)    print(f"我叫{name},今年{age}岁")introduce("小王", 18)       # "小王", 18 是实参(实际参数,真实数据)
  2. 位置参数:按顺序传递
    defpower(base, exp):return base ** expprint(power(2, 3))    # 8  (2的3次方)print(power(3, 2))    # 9  (3的2次方)  顺序很重要!
  3. 关键字参数:按名字传递(不怕顺序错)
    defintroduce(name, age, city):    print(f"我叫{name},{age}岁,来自{city}")introduce(name="小王", age=18, city="北京")    # 正常introduce(city="上海", name="小李", age=20)    # 顺序反了也OK!introduce("小张", city="广州", age=19)         # 混用:位置参数在前,关键字在后

四、返回值:return

  1. return的两个作用
    defcheck_age(age):if age < 0:return"年龄不能为负数"# 执行到这里,函数直接结束if age >= 18:return"成年人"return"未成年人"print(check_age(-5))    # 年龄不能为负数print(check_age(20))    # 成年人
    • 把结果返回给调用者
    • 立即结束函数执行
  2. 没有return的函数返回None
    defsay_hi():    print("Hi!")result = say_hi()       # 打印 Hi!print(result)           # Noneprint(type(result))     # <class 'NoneType'>
  3. 返回多个值(本质是返回元组)
    defdivmod_custom(a, b):    quotient = a // b    remainder = a % breturn quotient, remainder    # 返回一个元组 (商, 余数)q, r = divmod_custom(17, 5)      # 元组解包print(q)    # 3print(r)    # 2# 也可以整体接收result = divmod_custom(17, 5)print(result)   # (3, 5)

五、文档字符串

  1. 用三引号写在函数体第一行
    defcalculate_bmi(weight, height):"""    计算BMI指数    :param weight: 体重,单位kg    :param height: 身高,单位m    :return: BMI值,保留1位小数    """    bmi = weight / height ** 2return round(bmi, 1)# 查看文档print(calculate_bmi.__doc__)# 或用 help()help(calculate_bmi)

⚠️ 常见坑

  1. 调用函数时忘记加括号
    defgreet():    print("Hello")greet      # 这只是引用函数对象,不会执行!greet()    # ✅ 这才是调用
  2. 实参数量与形参不匹配
    defadd(a, b):return a + b# add(1)         # TypeError: add() missing 1 required positional argument# add(1, 2, 3)   # TypeError: add() takes 2 positional arguments but 3 were given
  3. 在函数内部修改不可变类型的外部变量不会生效
    deftry_change(x):    x = 100# 这只是改了局部变量xnum = 10try_change(num)print(num)        # 10,没变

✍️ 实战练习

  1. 温度转换器
    • 要求:写一个函数celsius_to_fahrenheit(c),将摄氏度转为华氏度(F = C * 9/5 + 32)。
    • 示例:
      defcelsius_to_fahrenheit(c):return c * 9 / 5 + 32print(celsius_to_fahrenheit(0))    # 32.0print(celsius_to_fahrenheit(100))  # 212.0
  2. 密码强度判断
    • 要求:写一个函数check_password(pwd),密码长度>=8返回"强",>=6返回"中",否则返回"弱"。
    • 示例:
      defcheck_password(pwd):if len(pwd) >= 8:return"强"elif len(pwd) >= 6:return"中"else:return"弱"print(check_password("abc123"))     # 中print(check_password("abc"))        # 弱
  3. 计算列表平均值
    • 要求:写一个函数average(nums),返回列表的平均值,空列表返回0。
    • 示例:
      defaverage(nums):ifnot nums:return0return sum(nums) / len(nums)print(average([85, 90, 78]))  # 84.3333print(average([]))            # 0

✅ 自测清单

  • [ ] 能解释函数是"打包好的代码积木",理解复用和简化的好处
  • [ ] 能用def定义函数,写出带参数和返回值的函数
  • [ ] 能区分形参(定义时的占位符)和实参(调用时的真实数据)
  • [ ] 知道return的两个作用:返回结果和结束函数
  • [ ] 知道没有return的函数返回None
  • [ ] 能用关键字参数调用函数,不受位置限制
  • [ ] 不会忘记调用函数时的括号()

最新文章

随机文章