函数的定义与调用
中等0让代码听话:函数的定义与调用
你有没有玩过这样的游戏?给一个虚拟宠物下指令:“坐下”“握手”“转圈”,宠物就会执行对应的动作。在Python里,函数就像你给代码起的“指令名字”。你可以把一串要重复使用的代码打包成一个函数,以后只要喊它的名字(加一对括号),这段代码就会自动执行,再也不用复制粘贴了。
什么是函数?
想象你有一个玩具机器人,你给它编了一个“跳舞”的程序。以后每次你对它说“跳舞”,它就会执行一连串的动作:转圈、挥手、蹦跳。在Python中,函数就像是给一段代码起了一个名字,当你需要执行这段代码时,只需“调用”这个名字即可,不用每次都重新写一遍。
函数的好处可多了:
- 避免重复 – 同样的代码只用写一次,想用几次用几次。
- 代码清晰 – 把复杂任务拆成一个个小函数,读起来像讲故事。
- 方便修改 – 如果某段逻辑要改,只改函数内部,其他地方全部自动更新。
定义函数:教会机器人新动作
定义函数就是“教会”机器人一个动作。使用关键字 def,后面跟函数名和一对圆括号,最后加冒号。函数体(要执行的代码)需要缩进。
# 定义一个叫“say_hello”的函数
def say_hello():
print("你好!")
print("欢迎来到Python世界!")
函数名要见名知意,比如 say_hello 一看就是打招呼。括号里暂时空的,以后可以放参数。冒号和缩进(通常4个空格)告诉Python哪些代码属于这个函数。
调用函数:喊出它的名字
定义好函数后,在代码中写函数名加括号,就会执行函数里的代码。这叫“调用函数”。
# 调用函数
say_hello()
# 输出:
# 你好!
# 欢迎来到Python世界!
注意:函数必须先定义再调用。就像你没教会机器人跳舞之前,喊“跳舞”它不会理你。
参数:让函数更灵活
函数还可以接收“参数”,就像对机器人说“跳舞3次”。在定义时,括号里放一个变量名;调用时,在括号里放具体的值。
def greet(name):
print("你好," + name + "!")
greet("小明") # 输出:你好,小明!
greet("小红") # 输出:你好,小红!
这里的 name 就是参数,每次调用时可以传入不同的名字。参数可以有很多个,用逗号隔开:
def show_score(name, score):
print(name + "考试得了" + str(score) + "分")
show_score("小红", 95) # 输出:小红考试得了95分
show_score("小明", 88) # 输出:小明考试得了88分
生活例子:你有一个朋友,你教它一个“买零食”函数,参数是零食名称和数量。每次你说“买零食(薯片, 2)”,它就知道买2包薯片。
返回值:函数还能给你“回信”
函数不仅能做事,还能给你一个结果。用 return 语句把结果送回来。
def add(a, b):
return a + b
result = add(3, 5) # result 得到返回值 8
print(result) # 输出:8
return 会立即结束函数,并把后面的值送回给调用者。这个值可以赋值给变量,也可以直接用在表达式中。
另一个例子:计算零花钱平均每天花多少。
def daily_avg(total_money, days):
return total_money / days
avg = daily_avg(300, 30) # 30天花了300元
print("平均每天花", avg, "元")
参数默认值:给参数一个“备用值”
有些参数大部分时候是同一个值,可以给它一个默认值。调用时如果不传,就使用默认值。
def say_hello(name="同学"):
print("你好," + name + "!")
say_hello() # 输出:你好,同学!
say_hello("老师") # 输出:你好,老师!
新手容易犯的5个错误
-
忘记括号:
say_hello # 错误!没加括号只表示函数对象,不会执行 say_hello() # 正确 -
少写冒号:
def greet(name) # 错误!缺少冒号 print(...) -
缩进不对:函数体必须缩进,而且同一函数的缩进要一致(通常4个空格)。
def test(): print("缩进错误") # 这行没有缩进,报错 -
定义后没调用:定义函数只是“教”了机器人,不喊它名字它不会动。记得在主代码中调用。
-
在 return 后面写代码:
return一执行函数就结束,后面的代码永远不会运行。def test(): return 10 print("这行不会执行") # 死代码
完整可运行的示例:计算考试平均分
下面是一个完整程序,用函数计算三个学生的平均分,并判断是否及格(>=60为及格)。
# 定义函数:计算平均分
def calc_avg(score1, score2, score3):
total = score1 + score2 + score3 # 总分
avg = total / 3 # 平均分
return avg
# 定义函数:判断是否及格
def is_pass(avg_score):
if avg_score >= 60:
return "及格"
else:
return "不及格"
# 主程序:输入三个成绩(整数)
score_a = 78 # 第一科成绩
score_b = 85 # 第二科成绩
score_c = 92 # 第三科成绩
average = calc_avg(score_a, score_b, score_c) # 调用求平均函数
result = is_pass(average) # 调用判断函数
print("平均分:", average)
print("结果:", result)
运行输出:
平均分: 85.0
结果: 及格
相关指引
你已经学会了函数的定义、调用、参数和返回值。接下来可以探索:
- 内置函数:Python自带的函数,比如
print()、len()、input(),可以直接用。 - 函数嵌套:在一个函数内部调用另一个函数。
- 递归:函数自己调用自己,解决像“汉诺塔”“斐波那契”等问题。
- 模块:把很多函数放进一个文件,用
import导入使用。
函数是编程世界里最基础也最强大的工具。就像你学会了“给机器人下指令”,以后可以指挥代码干更多有趣的事!
例题精讲
以下关于Python函数定义的说法,哪一个是正确的?
执行以下代码后,输出结果是什么? def add(a, b): return a + b result = add(3, 5) print(result)
在Python中,一个函数可以没有return语句,也可以没有参数。
请补全下面定义函数并调用的代码,使其计算两个数的乘积并打印结果。
def multiply(x, y):
___ # 计算乘积并返回
result = multiply(4, 6)
___ # 打印结果以下代码中,函数greet的定义缺少了参数。请补全,使得调用greet('Alice')输出'Hello, Alice!'。
def greet(___):
print('Hello, ' + name + '!')
greet('Alice')