刚学Python时,很多人卡在函数这关。其实函数没那么玄乎,它就像你家厨房里的电饭煲——按一下按钮,它就自动煮饭,不用每次重新发明怎么加热米粒。
函数是什么?
简单说,函数就是把一段代码打包命名,以后想用直接“喊名字”。比如你想算几个数的平均值,每次都写一遍加法除法太累,不如写个函数一次搞定。
def calculate_average(numbers):
total = sum(numbers)
count = len(numbers)
return total / count
scores = [85, 92, 78, 96]
print(calculate_average(scores))
上面这段代码定义了一个叫 calculate_average 的函数,传进去一个列表,它就能返回平均值。以后处理考试成绩、月度开支,直接调用就行。
带默认参数的函数更省事
有些情况你希望函数有点“默认操作”。比如发通知,默认走站内信,但也可以指定发邮件或短信。
def send_notification(message, method="web"):
print(f"发送消息:{message},方式:{method}")
send_notification("您有新订单") # 默认走站内
send_notification("密码已重置", method="email") # 指定邮件
这样调用时如果不填 method,默认就是 web,省得每次啰嗦。
函数也能返回多个值
有时候一个函数干完活,想告诉你好几件事。比如查网络状态,既要IP又要端口。
def get_server_info():
ip = "192.168.1.100"
port = 8080
return ip, port # 返回两个值
ip_addr, server_port = get_server_info()
print(f"服务地址:{ip_addr}:{server_port}")
虽然看着像返回了两个东西,其实是打包成元组,解包时分开接住就行。
嵌套函数:藏在里面的帮手
有些功能只在某个函数里用到,没必要暴露出去。比如验证用户输入时,内部写个小检查函数。
def process_user_data(name, age_str):
def is_valid_age(age_text):
return age_text.isdigit() and 0 < int(age_text) < 150
if is_valid_age(age_str):
age = int(age_str)
print(f"用户 {name},年龄 {age}")
else:
print("年龄格式不对")
process_user_data("小王", "25")
这里的 is_valid_age 就是小助手,外面没法直接调它,只服务于当前流程。
实际应用场景:自动配置端口映射
假设你在家里搭了个Web服务,每次重启都要手动设路由器端口转发。可以用Python写个脚本,封装成函数自动执行。
def setup_port_forward(protocol, internal_ip, external_port, internal_port):
print(f"正在设置 {protocol} 转发...")
print(f"外网端口 {external_port} → {internal_ip}:{internal_port}")
# 这里可以接入真实的路由器API
# 批量设置
setup_port_forward("TCP", "192.168.1.100", 80, 8000)
setup_port_forward("UDP", "192.168.1.100", 554, 554)
把重复操作变成函数调用,既不容易出错,改起来也方便。哪天换IP,改一处就行。
函数不是语法炫技,而是让代码更像工具箱。写多了你会发现,真正高效的程序员,不是写得多快,而是会把常用动作封装好,下次顺手拿来就用。