Python函数从入门到实战:一篇就够了
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本文基于三个实战代码文件,系统讲解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 函数有了全面的认识。多写多练,函数编程就会变得得心应手!
更多推荐



所有评论(0)