自学Python第8天:函数——我终于能把重复的代码“打包”起来了

自学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,欢迎在评论区告诉我你今天学到了什么,或者遇到了什么报错,一起交流!

相关文章: