自学Python第8天:函数------我终于能把重复的代码"打包"起来了
新手向 | 2026-06-30
如果你还记得前面几篇的内容,我写过体温检测程序、写过猜数字游戏、写过安检程序。这些代码每一段都有几十行,而且每写一个新功能,就得重新写一遍类似的逻辑。
比如体温检测,从第一天到第七天,我至少写了三四遍类似的代码。每次都是 input() 获取温度,然后 if 判断,然后 print() 输出结果。一模一样的套路,重复写了好几遍。
这样写下去,每写一个新程序就要从头开始,太累了。
今天就来解决这个问题------把重复的代码"打包"起来,需要的时候直接调用。
一、函数快速体验
想象一下食堂的打饭窗口。师傅不会每次给你打饭都重新学一遍"怎么打饭",而是早就把"打饭"这个动作练熟了。你只需要说一句"我要一份饭",师傅就知道怎么做。
函数就是程序里的"打饭师傅"------把一段经常用到的代码打包成一个整体,给它起个名字,以后需要的时候直接喊它的名字就行了。
看一个最简单的体验:
python
print("你好!")
print("欢迎来到我的程序!")
如果这两行代码要在多个地方使用,每次都重新写一遍。用函数可以这样做:
python
def say_hello():
print("你好!")
print("欢迎来到我的程序!")
定义完函数之后,只需要调用它就能执行里面的代码。这就是函数的快速体验------------先把代码打包,然后随时调用。
二、函数定义
定义一个函数的基本格式是:
python
def 函数名():
要执行的代码
举一个最简单的例子:
python
def say_hello():
print("你好!")
print("欢迎来到我的程序!")
这段代码定义了say_hello这个函数,它包含了两行print。但定义函数不等于执行函数,你只是告诉Python"有这么一回事",但Python还不会真的去运行它。
想让它运行,需要"调用"它。调用函数很简单,写上函数名加括号就行:
python
def say_hello():
print("你好!")
print("欢迎来到我的程序!")
# 调用函数
say_hello()
运行结果:
text
你好!
欢迎来到我的程序!
每次调用say_hello(),里面的两行print都会执行一遍:
python
say_hello()
say_hello()
say_hello()
运行结果:
text
你好!
欢迎来到我的程序!
你好!
欢迎来到我的程序!
你好!
欢迎来到我的程序!
这就是函数最核心的价值:写一次,用多次。
三、函数的参数
上面的say_hello()每次输出都是固定的内容。如果我想让函数根据不同的人输出不同的问候语呢?这时候就需要参数。
举个例子:
python
def say_hello(name):
print(f"你好,{name}!")
print("欢迎来到我的程序!")
say_hello("张三")
say_hello("李四")
运行结果:
text
你好,张三!
欢迎来到我的程序!
你好,李四!
欢迎来到我的程序!
name就是参数。调用函数时传入的值("张三"、"李四")会传递给name,函数内部就可以使用这个值。
参数可以用多个:
python
def greet(name, age):
print(f"我叫{name},今年{age}岁。")
greet("张三", 25)
greet("李四", 30)
运行结果:
text
我叫张三,今年25岁。
我叫李四,今年30岁。
**练习案例:**写一个函数,接收体温值,输出体温判断结果。
python
def check_temp(temp):
if temp <= 37.5:
print(f"体温{temp}度,正常")
else:
print(f"体温{temp}度,异常")
check_temp(36.5)
check_temp(38.0)
四、函数的返回值
有时候,函数不只是执行一些操作,还需要把处理结果"还"给调用它的方法。用return就可以实现。
python
def add(a, b):
result = a + b
return result
sum = add(3, 5)
print(sum) # 8
add(3, 5)的返回值是8,被赋值给了变量sum。
再看一个例子:
python
def is_adult(age):
if age >= 18:
return True
else:
return False
result = is_adult(20)
print(result) # True
**那return 和 print 到底有什么区别?**简单举个例子:
python
def add(a, b):
print(a + b) # 只打印,不返回
def add(a, b):
return a + b # 不打印,只返回
这样是不是就能理解"打印"和"返回"是两回事了。
并且要注意的是,调用带返回值的函数也需要括号,比如:
python
add # 这是函数本身,不会执行任何操作
add() # 这才是调用函数,会执行并返回结果
五、None:特殊的空值
在Python里,None表示"什么都没有"或"空"。如果一个函数没有写 return,或者写了 return 但后面不跟任何值,它默认返回的就是 None。
python
def say_hello():
print("你好!")
result = say_hello()
print(result) # None
say_hello()只打印了"你好!",但没有返回任何值,所以result的值是None。
什么时候用None?
- 占位:暂时还不知道放什么值,先用None占着;
- 判断:检查某个变量是否为空
python
name = None
if name is None:
print("还没有设置名字")
六、函数的说明文档
写好函数之后,最好加上说明文档,告诉别人(以及未来的自己)这个函数是干什么的、参数是什么、返回值是什么。
在函数内部第一行用三个引号写说明:
python
def add(a, b):
"""
计算两个数的和
:param a: 第一个数字
:param b: 第二个数字
:return: a 和 b 的和
"""
return a + b
查看说明文档可以用help():
python
help(add)
或者查看__doc__属性:
python
print(add.__doc__)
写说明文档是一个好习惯,尤其是代码量变大之后,它会帮你快速回忆"这个函数是干嘛的"。
七、函数的嵌套调用
函数内部可以调用另一个函数,这叫嵌套调用。
举个例子:
python
def greet(name):
print(f"你好,{name}!")
def welcome(name):
greet(name) # 调用 greet 函数
print("欢迎来到我的程序!")
welcome("张三")
运行结果:
text
你好,张三!
欢迎来到我的程序!
welcome函数内部调用了greet函数。先执行greet,打印"你好,张三!",然后再打印"欢迎来到我的程序!"。
**嵌套调用的好处:**可以把大任务拆分成小任务,每个小任务用一个函数完成,然后组合起来。
八、变量的作用域
变量的作用域是指变量在哪些地方可以被访问到。
局部变量:在函数内部定义的变量,只能在函数内部使用。
python
def test():
x = 10 # 局部变量
print(x)
test()
print(x) # 报错!x 在函数外部访问不到
全局变量:在函数外部定义的变量,可以在任何地方访问。
python
x = 10 # 全局变量
def test():
print(x) # 可以访问全局变量
test()
print(x) # 也可以访问
如果在函数内部要修改全局变量,需要用global声明:
python
x = 10
def test():
global x # 声明 x 是全局变量
x = 20 # 修改全局变量
test()
print(x) # 20
如果不加global,在函数内部修改全局变量会被Python当成创建了一个新的局部变量,不会影响到外部的全局变量。
九、一个我踩过的坑:忘记写括号
这是新手最容易犯的错误,我刚开始学函数的时候,有一次这样写:
python
def say_hello():
print("你好!")
say_hello # 忘记加括号了
运行后什么都没有输出,也没有报错,什么都没有发生。我当时还以为是Python坏了,后来才发现调用函数必须加括号。say_hello只是函数本身,say_hello()才是调用它。
十、综合示例:把体温检测改写成函数
把之前写的体温检测程序改写成函数,加上说明文档和嵌套调用:
python
# 这个函数负责获取体温,返回给调用者
def get_temperature():
"""
获取用户输入的体温
:return: 浮点数体温
"""
return float(input("请测量并输入您的体温:"))
def check_temperature(temp, standard=37.5):
"""
判断体温是否正常
:param temp: 体温值
:param standard: 标准温度,默认37.5
:return: True 表示正常,False 表示异常
"""
return temp <= standard
def print_result(temp, is_normal):
"""
打印体温检测结果
:param temp: 体温值
:param is_normal: 是否正常
"""
print(f"体温测量中,您的体温是:{temp}度")
if is_normal:
print("体温正常请进!")
else:
print("需要隔离!")
def main():
print("欢迎来到辽宁!请出示您的健康码以及72小时核酸证明,并配合测量体温。")
temp = get_temperature()
result = check_temperature(temp)
print_result(temp, result)
main()
一次定义可以反复使用,每个函数只做一件事,代码清晰易读。以后如果想修改体温检测的逻辑,只需要改对应的函数就行了。
小结
今天学的东西,整理成一张速查表:
| 知识点 | 作用 | 示例 |
|---|---|---|
| def | 定义函数 | def say_hello(): |
| 参数 | 让函数接收外部数据 | def greet(name): |
| return | 返回值给调用者 | return a + b |
| None | 表示空值 | return None |
| 说明文档 | 解释函数的作用 | """ 函数说明 """ |
| 嵌套调用 | 函数内部调用另一个函数 | def a(): b() |
| 局部变量 | 函数内部定义,只能在内部使用 | x = 10 在函数内 |
| 全局变量 | 函数外部定义,任何地方可用 | x = 10 在函数外 |
| global | 在函数内修改全局变量 | global x |
什么时候用函数?
- 一段代码在多个地方重复出现 → 封装成函数
- 一个功能逻辑很复杂 → 拆分成多个小函数
- 想让代码更容易理解和维护 → 用函数组织逻辑
下一篇我将要学习数据容器的入门和列表。
如果你也在学Python,欢迎在评论区告诉我你今天学到了什么,或者遇到了什么报错,一起交流!
相关文章: