提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文基于三个实战代码文件,系统讲解Python函数的定义、参数类型、返回值以及综合应用,适合Python初学者快速掌握函数编程。

一、函数是什么?

    函数是一段提前组织好的,可以重复利用的代码块,用来实现单一,相关联的共能。函数就像饭店的“菜单”一样,提前编写好,点单完成,就能得到做好的菜,而不需要每次从头执行。

1.为什么需要函数?

先看一个例子:如果我们要打印1到5的数字,可能会这样写:

print(1)
print(2)
print(3)
print(4)
print(5)

如果需要在多个地方重复打印1到5,难道要复制粘贴多次吗?显然这样代码会变得冗余且难以维护。

使用循环可以解决一部分问题:

python
for i in range(1, 6):
    print(i)

但如果需要在程序的不同位置多次执行同样的打印操作,每次都要写一遍循环,仍然很麻烦。这时候,函数就派上用场了

二、函数的定义与调用

2.1 基本语法

Python中定义函数使用 def 关键字:

def 函数名():
    函数体

函数1.1

def my_print():
    """
    函数注释:函数说明
    """
    for i in range(1, 6):
        print(i)
# 调用函数
my_print()
my_print()
my_print()

上面的代码定义了一个名为 my_print 的函数,每次调用都会打印1到5的数字

💡 提示:函数定义时不会执行函数体,只有调用时才会执行。

三、函数的参数

3.1 位置参数

让函数更灵活,可以给它传入参数:

def my_print(start, stop, msg):
    """
    自定义打印函数
    :param start: 开始
    :param stop: 结束
    :param msg: 打印信息
    """
    for i in range(start, stop):
        print(i, msg)

my_print(1, 6, "好饿呀")      # 输出:1 好饿呀 ... 5 好饿呀
my_print(55, 60, "开饭了")    # 输出:55 开饭了 ... 59 开饭了

这里 start、stop、msg 就是位置参数,调用时按顺序传入】。

3.2 默认参数

有些参数在大多数情况下有固定值,可以设置默认值:

def my_print(msg="醒醒啦", n=1):
    for i in range(n):
        print(msg)

my_print("开饭啦")      # msg="开饭啦", n=1
my_print(n=10)          # msg="醒醒啦", n=10

当调用时没有传入参数,就会使用默认值。

3.3 关键字参数

调用函数时,可以通过 参数名=值 的方式指定参数,顺序可以打乱:

def my_max(a, b):
    return a if a > b else b

print(my_max(1, 2))        # 位置参数
print(my_max(b=1, a=2))    # 关键字参数

两种调用方式都合法,但关键字参数更清晰。

3.4 可变参数

有时候我们不确定要传入多少个参数,可以使用:

*args:接收任意数量的位置参数,打包成元组

**kwargs:接收任意数量的关键字参数,打包成字典

def my_print(*args, **kwargs):
    print(args, type(args))      # (10, 20, 30, 40, 50) <class 'tuple'>
    print(kwargs, type(kwargs))  # {'a': 10, 'b': 20, 'c': 30} <class 'dict'>

my_print(10, 20, 30, 40, 50, a=10, b=20, c=30)

参数的顺序规则是:**位置参数 → 默认参数 → *args → kwargs。

3.5 参数解包

反过来,我们也可以将列表或字典“拆开”作为参数传入:

# 列表解包
def add(a, b, c):
    return a + b + c

datas = [10, 20, 30]
print(add(*datas))    # 输出:60
# 字典解包
def greet(name, age, addr):
    print(f"{name} 今年 {age}{addr}")

data = {"name": "小明", "age": 20, "addr": "郑州"}
greet(**data)         # 输出:小明 今年 20 岁 郑州
  • 用于解包列表/元组,** 用于解包字典。

四、函数的返回值

4.1 return 语句

函数可以使用 return 返回结果:

def get_total(a, b):
    total = 0
    for i in range(a, b+1):
        if i % 2:      # 判断奇数
            total += i
    return total

print(get_total(10, 50))   # 输出:10到50之间所有奇数的和

return 会立即结束函数,后面的代码不会执行。

4.2 返回多个值

Python函数可以同时返回多个值,实际上是以元组形式返回:

def my_print():
    return 100, 200.0, True, "hello", [1, 2, 3]

r = my_print()
print(r)   # (100, 200.0, True, 'hello', [1, 2, 3])

多个返回值可以用多个变量接收。

4.3 没有 return 的情况

如果函数没有 return 语句,默认返回 None:

r = print(666)
print(r)   # None

print 函数执行打印功能,但没有返回值。

五、综合实战案例

案例一:求阶乘和
需求:计算 5! + 4! + 3! + 2! + 1!

def get_mul(i):
    """计算 i 的阶乘"""
    mul = 1
    for j in range(1, i + 1):
        mul *= j
    return mul

def get_sum(value):
    """计算 1! 到 value! 的和"""
    total = 0
    for i in range(1, value + 1):
        total += get_mul(i)
    return total

print(get_sum(5))   # 输出:153

这里使用了函数嵌套调用——get_sum 内部调用了 get_mul。

案例二:判断质数并统计
需求:统计 500~1000 之间有多少个质数

def is_prime(value):
    """判断一个数是否为质数"""
    for i in range(2, value):
        if value % i == 0:
            return False
    else:
        return True

def get_count(a, b):
    """统计 a 到 b 之间的质数个数"""
    count = 0
    for i in range(a, b + 1):
        if is_prime(i):
            count += 1
    return count

print(get_count(500, 1000))   # 输出:73

⚠️ 注意:这里的 for…else 结构,当循环没有被 break 中断时,会执行 else 分支。

案例三:寻找质数对
需求:在 500~1000 范围内,找出相差为 18 的三个质数(即 p, p+18, p+36 都是质数)

def is_prime(value):
    for i in range(2, value):
        if value % i == 0:
            return False
    else:
        return True

def get_prime_pairs(a, b, c):
    result = []
    for i in range(a, b + 1):
        if is_prime(i) and is_prime(i + c) and is_prime(i + c + c):
            result.append((i, i + c, i + c + c))
    return result

print(get_prime_pairs(500, 1000, 18))

输出示例:[(523, 541, 559), …]

案例四:turtle 绘图——封装绘制三角形
需求:封装一个函数,传入三个顶点坐标和颜色,绘制填充三角形

import turtle

def draw(pencolor, fillcolor, point1_x, point1_y, 
         point2_x, point2_y, point3_x, point3_y):
    turtle.color(pencolor, fillcolor)
    turtle.up()
    turtle.goto(point1_x, point1_y)
    turtle.down()
    turtle.begin_fill()
    turtle.goto(point2_x, point2_y)
    turtle.goto(point3_x, point3_y)
    turtle.goto(point1_x, point1_y)
    turtle.end_fill()

# 调用函数绘制三个三角形
draw("red", "green", 50, 50, -150, 200, -100, 80)
draw("pink", "purple", 150, -50, -150, 200, 100, -80)
draw("black", "blue", -150, -150, 250, 250, 100, -180)

turtle.mainloop()

这个案例展示了如何将重复的绘图逻辑封装成函数,通过参数控制不同的颜色和位置。

总结

函数是 Python 编程的核心概念,掌握函数的定义、参数传递和返回值,是写出高质量、可维护代码的基础。通过本文的讲解和实战案例,相信你已经对 Python 函数有了全面的认识。多写多练,函数编程就会变得得心应手!

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐