一、为什么学到现在,你的Python越来越乱?
回想一下你第一次写Python程序的样子。那时候,学会了变量、数学运算、列表、字典,甚至还能做输入输出、循环控制。你写的小游戏也能跑起来——比如猜数字、打印乘法口诀。
可是,慢慢地你发现一个问题: 程序越写越长,逻辑越来越复杂,你自己看一眼都头大,更别说几天后回头看,简直一脸懵——“这行是干嘛的来着?”
如果你有这种感觉,别慌,这很正常。写程序就像盖房子,一开始堆砖没问题,可房子大了,你必须学会分区、分层,否则最后变成一堆乱搭的积木。
Python给了我们三个法宝,帮你把复杂程序拆得清清楚楚:
- 函数(Function) —— 把常用的代码封装成“积木”,随时拿来用。
- 对象(Object) —— 把数据和方法打包成一个整体。
- 模块(Module) —— 把不同功能的代码装进不同文件。
今天,我们重点聊第一个——函数。学会它,你的代码不但好看,还能复用,省时省力。
二、函数:程序的乐高积木
先不谈技术名词,把函数想象成一个“工具包”。 你在生活中用的剪刀、螺丝刀,就是“函数”——它们能帮你完成特定任务,而且可以反复使用。
在Python里,你用 def 来定义一个函数,再用“函数名+括号”来调用它。
比如,我们之前写过99乘法口诀,如果不封装成函数,每次都得复制粘贴那一堆循环代码;而封装后,只要一句 print_multiplication_table(),全搞定。
# 打印99乘法口诀
def print_multiplication_table():
for i in range(1, 10): # 外层循环控制行数
for j in range(1, i + 1): # 内层循环控制每行的乘法式数量
print(f"{j}*{i}={i*j}", end="\t")
print()
# 调用函数
print_multiplication_table()
是不是立刻整洁了? 而且,下次你想打印5以内的乘法口诀,只需加个参数,就能做到。
三、让函数更聪明——参数
1. 单个参数
参数的作用,就是在调用函数时,告诉它“这次要怎么干活”。
比如,我们想要一个“自适应”的乘法口诀函数,可以这样写:
# 打印n以内的乘法口诀
def print_multiplication_table(n):
print('print multiplication table within:', n)
for i in range(1, n):
for j in range(1, i + 1):
print(f"{j}*{i}={i*j}", end="\t")
print()
print_multiplication_table(5)
print_multiplication_table(8)
一次传5,打印5以内;传8,就打8以内。灵活得很。
2. 多个参数
如果你的函数需要两个甚至多个信息,可以这样:` def add(a, b): # a 和 b 是形参 return a + b
result = add(3, 5) # 3 和 5 是实参 `
记住,形参是函数定义时写的变量名,是占位符;实参是调用时传入的真实数据。
3. 参数太多怎么办?
如果参数超过5个,可读性会很差。这时可以用列表或字典,把它们打包后一次性传进去。 比如,你想传10个数字,不如放进一个列表,一次性传过去,代码清爽多了。
四、让函数有“回信”——返回值
到目前为止,函数都是帮你做事,但它还可以把结果“回寄”给你——这就是返回值(return)。` def calculateTax(price, tax_rate):
taxTotal = price + (price * tax_rate)
return taxTotal
totalPrice = calculateTax(7.99, 0.06) print(totalPrice) # 8.4694 `
返回值的好处是:你可以直接拿来用,不必在函数里就输出。 比如,可以在不同地方用这个值计算总额、打折、记录日志……
五、作用域:变量的地盘
作用域(scope)决定了变量能在哪用。
- 局部变量:函数里定义的,只在函数内部有效。
- 全局变量:函数外部定义的,整个程序都能用。
但是要注意,如果你在函数里用和全局变量同名的变量,Python会优先创建一个新的局部变量,不会改到外面的值。 如果确实要改全局变量,可以用 global 关键字,但不建议滥用,否则调试起来很麻烦。
六、实战练习
说了这么多,咱们来点实战——用函数封装常见小项目。
1. 猜数字游戏
import random
def guess_number(start, end):
secret = random.randint(start, end)
print('数字范围:start=', start, 'end=', end)
while True:
user = int(input("输入您猜测的数字: "))
if user == secret:
print("恭喜猜对!")
break
print("太大了" if user > secret else "太小了")
guess_number(1, 100)
2. 五角星绘图
import turtle
def star(size, color):
t = turtle.Turtle()
t.color(color)
for _ in range(5):
t.forward(size)
t.right(144)
star(50, "red")
star(100, "blue")
turtle.done() `
3. 用大写字母打印名字
import time
def print_daisy():
letters = { # 每个字母的图案数据... }
name = "DAISY"
for i in range(6):
line = ""
for char in name:
line += letters[char][i]
time.sleep(0.1)
print(line)
print_daisy()
七、总结
- 用函数把代码“积木化”,让程序更简洁可维护。
- 参数让函数更灵活,返回值让函数能“回信”。
- 注意变量的作用域,别让同名变量互相干扰。
- 多练实战,函数才能真正成为你写Python的“利器”。
如果你照着这个思路去改自己的Python代码,你会发现:
- 程序变短了
- 错误少了
- 逻辑更清楚了
- 维护起来轻松多了
这就是从“写代码”到“写好代码”的关键一步。