前面几课我们已经学过变量、数据类型、条件判断和循环。到这里,你已经可以写出一些简单逻辑了。

不过,当代码越来越多时,一个新问题会出现:重复代码变多,程序越来越乱。

比如你要多次打印欢迎语:

print("欢迎学习 Python")
print("今天也要加油")

print("欢迎学习 Python")
print("今天也要加油")

print("欢迎学习 Python")
print("今天也要加油")

能运行,但很啰嗦。

这时候就需要函数。

一、函数是什么?

函数可以理解成一个“打包好的小工具”。

你把一段代码放进函数里,给它起一个名字。以后想用这段代码时,只需要调用这个名字。

定义函数用 def

def say_hello():
    print("欢迎学习 Python")
    print("今天也要加油")

调用函数:

say_hello()

运行结果:

欢迎学习 Python
今天也要加油

函数最大的好处是:写一次,可以用很多次。

二、函数的基本格式

函数最常见的格式是:

def 函数名():
    函数里的代码

注意两点:

  • 函数名后面要有小括号
  • 函数体要缩进

比如:

def show_menu():
    print("1. 查看余额")
    print("2. 存钱")
    print("3. 取钱")

调用:

show_menu()

三、带参数的函数

刚才的函数每次输出的内容都是固定的。如果我们希望函数更灵活,就可以使用参数。

def say_hello(name):
    print("你好," + name)

调用时传入不同的名字:

say_hello("小明")
say_hello("小红")

运行结果:

你好,小明
你好,小红

这里的 name 就是参数。

你可以把参数理解成:调用函数时临时放进去的数据。

四、多个参数

函数可以接收多个参数。

def add(a, b):
    result = a + b
    print(result)

调用:

add(3, 5)
add(10, 20)

运行结果:

8
30

如果参数有多个,传入时要注意顺序。

def introduce(name, age):
    print("我叫", name)
    print("今年", age, "岁")

introduce("小明", 18)

五、return 返回结果

有些函数不只是打印内容,而是要把计算结果返回给我们。

这时候用 return

def add(a, b):
    return a + b

调用函数并接收结果:

total = add(3, 5)
print(total)

运行结果:

8

print() 是把内容显示出来,return 是把结果交回给调用者。

这两者不要混淆。

六、函数小练习:判断是否成年

我们把前面学过的条件判断放进函数里。

def check_adult(age):
    if age >= 18:
        return "已成年"
    else:
        return "未成年"

result = check_adult(20)
print(result)

运行结果:

已成年

再调用一次:

print(check_adult(15))

运行结果:

未成年

这样一来,只要以后需要判断年龄,就可以直接复用 check_adult()

七、函数让代码更清晰

来看一个简单例子:计算两个数的平均值。

不使用函数:

a = 80
b = 90
average = (a + b) / 2
print(average)

c = 70
d = 100
average = (c + d) / 2
print(average)

使用函数:

def get_average(x, y):
    return (x + y) / 2

print(get_average(80, 90))
print(get_average(70, 100))

是不是清爽很多?

函数不是为了炫技,而是为了让代码更好读、更好改。

八、模块是什么?

学完函数后,再来看模块就很容易了。

模块可以理解成一个 Python 文件,里面放了一些现成的函数、变量或类。

我们可以通过 import 使用模块。

比如 Python 自带一个数学模块 math

import math

print(math.sqrt(16))

运行结果:

4.0

这里的 sqrt 是求平方根的函数。

九、为什么要用模块?

因为很多功能别人已经帮我们写好了。

比如:

  • 数学计算可以用 math
  • 随机数可以用 random
  • 时间日期可以用 datetime

我们不需要什么都从零开始写。

编程不是每次都重新造工具,而是学会找到合适的工具,并正确使用它。

十、random 模块:生成随机数

先导入模块:

import random

生成 1 到 10 之间的随机整数:

number = random.randint(1, 10)
print(number)

每次运行,结果可能都不一样。

我们可以做一个简单的抽奖程序:

import random

names = ["小明", "小红", "小刚", "小美"]
winner = random.choice(names)

print("中奖的是:", winner)

这里的 choice() 会从列表中随机选一个元素。

十一、datetime 模块:获取当前日期

import datetime

today = datetime.date.today()
print(today)

它会输出当前日期,例如:

2026-06-12

如果你写打卡程序、日志程序、记账程序,日期和时间就很常用。

十二、from import 写法

除了直接 import 模块名,还可以只导入模块里的某个功能。

from random import randint

number = randint(1, 10)
print(number)

这种写法的好处是调用时更短。

但对于新手来说,一开始更推荐使用:

import random

然后写:

random.randint(1, 10)

这样你能清楚地知道这个函数来自哪个模块。

十三、自己写一个模块

模块并不神秘。你自己写的 .py 文件,也可以是模块。

假设我们创建一个文件 tools.py

def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

再创建一个文件 main.py

import tools

print(tools.add(3, 5))
print(tools.multiply(4, 6))

只要两个文件在同一个文件夹里,main.py 就可以导入 tools.py

这就是模块最基础的用法。

十四、新手容易踩的坑

1. 定义了函数但没有调用

def hello():
    print("Hello")

这段代码只是定义函数,不会输出内容。

需要调用:

hello()

2. 忘记写括号

错误写法:

hello

正确写法:

hello()

3. 参数数量不匹配

def add(a, b):
    return a + b

print(add(3))

这个函数需要两个参数,但只传了一个,会报错。

正确写法:

print(add(3, 5))

4. 文件名和模块名冲突

如果你把自己的文件命名为 random.py,再写:

import random

就可能导入到你自己的文件,而不是 Python 自带的 random 模块。

所以新手不要用 random.pymath.pydatetime.py 这类名字给自己的文件命名。

十五、本课总结

这一课我们学习了:

  • 如何用 def 定义函数
  • 如何调用函数
  • 什么是参数
  • 什么是 return
  • 函数为什么能减少重复代码
  • 如何使用 import 导入模块
  • 常见内置模块:mathrandomdatetime
  • 如何创建并导入自己的模块

函数让代码从“能跑”变成“好维护”,模块让我们可以使用别人已经写好的工具。

到这里,你已经不只是会写几行 Python 代码了,而是开始接触真正的代码组织方式。

下一课可以继续学习:字符串和列表的常用操作。这是写爬虫、数据处理、自动化脚本之前必须掌握的一块基础。

更多推荐