第十二课:函数的“输入和输出” – 参数和返回值
- 时长: 90 分钟
- 教学目标:
- 理解为什么函数需要“输入”(参数):让同一个函数处理不同的数据。
- 学习定义带参数的函数。
- 掌握如何在调用函数时给函数传递参数。
- 理解形参和实参的概念。
- 理解为什么函数需要“输出”(返回值):让函数把计算或处理的结果“给”回来,以便程序在其他地方使用。
- 学习使用
return
语句让函数返回一个值。 - 能够编写和使用带参数和返回值的函数。
- 初步理解变量的作用域(局部变量)。
课程内容
1. 复习与引入 (10 分钟)
- 复习: 快速回顾上一节课函数的基础知识:定义函数
def
,调用函数函数名()
,函数的作用是打包代码、方便复用。 - 提出问题: 老师提问:“上次我们定义了一个函数
print_square()
打印 3×3 的正方形。如果我想打印 5×5 的正方形怎么办?或者 2×2 的?难道要为每种大小都写一个不同的函数吗?如果我定义了一个函数计算 1 到 5 的和,那怎么计算 1 到 100 的和呢?我们怎么‘告诉’函数它应该处理什么数据?” - 引出参数: 函数就像一台机器,如果我们想让它处理不同的原材料,就需要有地方把原材料“喂”给它。这些“原材料”就是函数的参数。
- 提出问题: “我们之前计算 1 到 5 的和是在函数里面直接打印的。但如果我不想直接打印,而是想把计算结果‘拿出来’,在程序里做别的事情(比如和另一个数的和再相加),怎么办?”
- 引出返回值: 函数处理完数据后,可以把处理结果“送出来”,这个“送出来”的结果就是函数的返回值。使用
return
语句。
2. 函数的“输入” – 参数 (25 分钟)
- 概念: 参数是在定义函数时,写在函数名后面的括号里的变量名。它们就像函数接收数据的“入口”。在调用函数时,我们在括号里传入实际的数据,这些数据会赋值给对应的参数变量。
- 语法 – 定义带参数的函数: 在
def 函数名()
的括号里写上参数名,多个参数用逗号分隔。# 定义一个带参数的函数,参数名叫做 name def greet(name): # name 是参数 print("你好," + name + "!") print("很高兴为你服务。") # 定义一个带两个参数的函数,参数名叫做 num1, num2 def add_numbers(num1, num2): # num1, num2 是参数 sum_result = num1 + num2 print("它们的和是:", sum_result)
- 语法 – 调用带参数的函数: 在调用函数时,在括号里按照参数的顺序传入实际的数据(叫做实参)。
# 调用 greet 函数,传入实参 "小明" greet("小明") # 这里的 "小明" 是实参,它会被赋值给函数定义里的 name 参数 # 调用 greet 函数,传入实参 "爱丽丝" greet("爱丽丝") # 这里的 "爱丽丝" 是实参,它会被赋值给函数定义里的 name 参数 # 调用 add_numbers 函数,传入实参 5 和 3 add_numbers(5, 3) # 5 赋值给 num1,3 赋值给 num2 # 调用 add_numbers 函数,传入变量作为实参 a = 10 b = 20 add_numbers(a, b) # 变量 a 的值 10 赋值给 num1,变量 b 的值 20 赋值给 num2
- 形参 vs 实参 (简单概念): 定义函数时括号里的参数名(如
name
,num1
)叫做形式参数 (形参),它们是函数内部使用的变量名。调用函数时括号里传入的实际值(如"小明"
,5
)叫做实际参数 (实参)。 - 演示: 老师演示如何定义和调用带一个或多个参数的函数,展示传入不同参数时,函数执行结果的变化。 演示传入的实参个数或类型与定义不符时会出错。
- 动手实践: 学生编写代码,定义一个函数
print_info(name, age)
,打印一个人的名字和年龄。然后调用这个函数,传入不同的名字和年龄。 定义一个函数print_shape(char, size)
,用指定字符打印指定大小的正方形。
3. 函数的“输出” – 返回值 (25 分钟)
- 概念: 函数执行完任务后,可以使用
return
语句把一个结果“送”出来,这个结果就叫做返回值。 return
的作用:- 结束函数当前的执行,即使后面还有代码,也不会再执行了。
- 将
return
后面的值作为函数的执行结果返回到调用它的地方。
- 语法: 在函数体内部使用
return 值
。# 定义一个函数,计算两个数的和,并返回结果 def calculate_sum(x, y): sum_result = x + y return sum_result # 返回计算得到的和 # 定义一个函数,检查一个数字是否是偶数,返回 True 或 False def is_even(number): if number % 2 == 0: return True else: return False # 注意:也可以不写 else,如果上面条件不满足,函数会继续往下执行,遇到 return 结束并返回值 # 定义一个函数,什么也不返回 (默认返回 None) def do_nothing(): print("我什么也没做。") # 没有 return 语句,函数默认返回 None (一个特殊的值,表示“空”或“没有”)
- 接收返回值: 调用函数时,可以使用一个变量来“接收”函数的返回值。
# 调用 calculate_sum 函数,并将返回值存到 result 变量里 result = calculate_sum(10, 20) print("两个数的和是:", result) # 结果是 30 # 直接使用返回值 print("10 和 20 的和的两倍是:", calculate_sum(10, 20) * 2) # 将返回值直接用于计算 # 调用 is_even 函数 print(is_even(4)) # 结果是 True print(is_even(7)) # 结果是 False # 调用 do_nothing 函数 nothing = do_nothing() print(nothing) # 结果是 None
- 演示: 老师演示如何编写带
return
语句的函数,如何接收返回值,并使用返回值进行后续操作。 演示没有return
语句的函数默认返回None
。 演示return
会结束函数。def test_return(num): if num > 10: return "大于 10" # 遇到 return 函数就结束了 print("小于等于 10") # 如果 num > 10,这行不会执行 return "小于等于 10" # 如果 num <= 10,执行到这里返回
- 动手实践: 学生编写代码,定义一个函数
multiply(a, b)
,计算两个数的乘积并返回。 调用这个函数,接收返回值并打印。 定义一个函数get_first_char(text)
,返回字符串的第一个字符。
4. 局部变量 (简单概念) (5 分钟)
- 概念: 在函数内部定义的变量,只能在函数内部使用。函数执行结束后,这些变量就会“消失”。它们叫做局部变量。
- 示例:
def my_function(): x = 10 # x 是局部变量 print("函数内部的 x:", x) my_function() # print(x) # 错误!在函数外部无法访问局部变量 x
- 讲解目的: 帮助学生理解为什么函数内部的变量不会影响外部,以及如何通过参数和返回值来传递数据进出函数。
5. 课堂练习 (15 分钟)
让学生独立完成以下练习:
- 练习 1: 编写一个函数
get_max(num1, num2)
,接收两个数字作为参数,返回其中较大的那个数字。(提示:使用if-else
判断大小,然后return
)。# 在这里定义你的函数 def get_max(num1, num2): # TODO: 比较 num1 和 num2 # TODO: 返回较大的那个 pass # 在这里调用你的函数并打印结果 print(get_max(10, 5)) # 应该打印 10 print(get_max(3, 12)) # 应该打印 12
- 练习 2: 编写一个函数
is_leap_year(year)
,接收一个年份作为参数,判断该年份是否为闰年(使用简单规则:能被 4 整除)。返回True
或False
。(提示:使用%
和if-else
)。# 在这里定义你的函数 is_leap_year def is_leap_year(year): # TODO: 判断是否是闰年 # TODO: 返回 True 或 False pass # 在这里调用函数并打印结果 print(is_leap_year(2024)) # 应该打印 True print(is_leap_year(2023)) # 应该打印 False
- 练习 3: 编写一个函数
calculate_average(scores_list)
,接收一个数字列表(分数列表)作为参数,计算并返回列表中所有分数的平均值。(提示:使用sum()
和len()
函数,注意除法结果可能是浮点数)。# 在这里定义你的函数 calculate_average def calculate_average(scores_list): # TODO: 计算总和 # TODO: 计算元素个数 # TODO: 计算平均值 # TODO: 返回平均值 pass # 在这里调用函数并打印结果 my_scores = [80, 90, 70, 100] average = calculate_average(my_scores) print("平均分是:", average) # 应该打印 85.0
6. 总结与提问 (10 分钟)
- 回顾: 回顾本节课内容:函数的“输入”(参数)和“输出”(返回值),如何定义带参数的函数
def 函数名(参数1, 参数2):
,如何在调用时传递实参函数名(值1, 值2)
,return
语句的作用(返回结果并结束函数),如何接收函数的返回值,局部变量的概念。 - 提问:
- 参数有什么用?
- 定义函数时括号里的叫什么参数?调用函数时括号里传的实际值叫什么参数?
return
语句的作用是什么?- 一个函数可以返回多个值吗?(简单解释:可以返回一个元组或列表)
- 在函数里定义的变量,能在函数外面直接用吗?
- 答疑: 回答学生问题。
7. 布置课后作业 (5 分钟)
- 作业 1: 编写一个函数
print_many_times(text, count)
,接收一个字符串text
和一个整数count
作为参数,使用for
循环将text
打印count
次。然后调用这个函数,打印“好好学习” 3 次。 - 作业 2: 编写一个函数
fahrenheit_to_celsius(fahrenheit)
,接收华氏温度作为参数,将其转换为摄氏温度并返回。转换公式:摄氏度 = (华氏度 – 32) / 1.8。调用这个函数,将 68 华氏度转换为摄氏度并打印结果。 - 作业 3: 编写一个函数
get_even_numbers(numbers_list)
,接收一个数字列表作为参数,创建一个新的空列表,将参数列表中所有的偶数添加到新列表中,并返回这个新列表。调用这个函数,传入一个数字列表,打印返回的只包含偶数的新列表。 - 作业 4: (选做) 编写一个函数
find_min_index(numbers_list)
,接收一个数字列表作为参数,返回列表中最小元素的索引位置。(提示:不要直接用min()
,需要自己遍历列表并记录最小值和它的索引)。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)