1. 函数定义语法
函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。Python使用 def 关键字来定义函数。
# 基本函数定义语法
def 函数名(参数列表):
"""文档字符串"""
函数体
return 返回值
# 实际示例
def greet(name):
"""向用户打招呼"""
message = f"你好,{name}!"
return message
# 调用函数
result = greet("小明")
print(result) # 输出:你好,小明!
2. 函数命名规范
命名规则:
- • 使用小写字母和下划线
- • 名称应该具有描述性
- • 避免使用Python关键字
- • 遵循PEP 8命名规范
示例:
# 好的命名
def calculate_area(radius):
def get_user_name():
def is_valid_email(email):
# 不好的命名
def a():
def getUserName():
def CalculateArea():
3. 参数和返回值
位置参数
def add_numbers(a, b):
"""计算两个数字的和"""
return a + b
result = add_numbers(5, 3) # a=5, b=3
print(result) # 输出:8
默认参数
def greet(name, greeting="你好"):
"""自定义问候语"""
return f"{greeting},{name}!"
print(greet("小明")) # 输出:你好,小明!
print(greet("小红", "嗨")) # 输出:嗨,小红!
关键字参数
def create_profile(name, age, city="北京"):
"""创建用户档案"""
return f"姓名:{name},年龄:{age},城市:{city}"
# 使用关键字参数调用
profile = create_profile(name="张三", age=25, city="上海")
print(profile)
4. 作用域概念
Python中的作用域决定了变量的可见性。主要有两种作用域:全局作用域和局部作用域。
# 全局变量
user_name = "小明"
def show_user():
# 局部变量
local_name = "小红"
print(f"局部变量:{local_name}")
print(f"全局变量:{user_name}")
show_user()
print(user_name) # 可以访问全局变量
# print(local_name) # 错误!无法访问局部变量
故事化案例:智能餐厅点餐系统
场景:小王开了一家智能餐厅,需要开发一个点餐系统。系统需要处理菜单管理、订单计算、折扣应用等功能。让我们用函数来实现这些功能!
1. 菜单显示功能
def display_menu(menu_items):
"""显示菜单"""
print("=== 智能餐厅菜单 ===")
for index, (item, price) in enumerate(menu_items.items(), 1):
print(f"{index}. {item} - ¥{price}")
print("=" * 20)
# 使用示例
menu = {
"宫保鸡丁": 28,
"麻婆豆腐": 18,
"糖醋里脊": 32,
"清蒸鲈鱼": 45
}
display_menu(menu)
2. 计算订单总价
def calculate_total(order_items, menu):
"""计算订单总价"""
total = 0
for item, quantity in order_items.items():
if item in menu:
total += menu[item] * quantity
else:
print(f"警告:{item} 不在菜单中")
return total
# 使用示例
order = {"宫保鸡丁": 2, "糖醋里脊": 1}
total = calculate_total(order, menu)
print(f"订单总价:¥{total}")
3. 应用折扣
def apply_discount(total, discount_rate=0.9):
"""应用折扣"""
if total >= 100:
discount = total * (1 - discount_rate)
final_total = total * discount_rate
print(f"满100减{discount:.0f}元优惠已应用!")
return final_total
else:
print("订单未满100元,无折扣")
return total
# 使用示例
final_amount = apply_discount(total)
print(f"最终支付:¥{final_amount:.0f}")
练习题(共6个)
练习题1:温度转换器
创建一个函数,将摄氏度转换为华氏度。公式:F = C × 9/5 + 32
要求:函数应该接受摄氏度作为参数,返回对应的华氏度。
def celsius_to_fahrenheit(celsius):
"""将摄氏度转换为华氏度"""
fahrenheit = celsius * 9/5 + 32
return fahrenheit
# 测试
print(celsius_to_fahrenheit(0)) # 32.0
print(celsius_to_fahrenheit(25)) # 77.0
print(celsius_to_fahrenheit(-10)) # 14.0
练习题2:计算器函数
创建一个函数,接受两个数字和一个运算符(+、-、*、/),返回计算结果。
要求:处理除零错误,返回友好的错误信息。
def calculator(num1, num2, operator):
"""简单计算器"""
if operator == '+':
return num1 + num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1 * num2
elif operator == '/':
if num2 == 0:
return "错误:除数不能为零"
return num1 / num2
else:
return "错误:无效的运算符"
# 测试
print(calculator(10, 5, '+')) # 15
print(calculator(10, 0, '/')) # 错误:除数不能为零
练习题3:列表平均值
创建一个函数,计算数字列表的平均值。如果列表为空,返回0。
def calculate_average(numbers):
"""计算数字列表的平均值"""
if not numbers: # 检查列表是否为空
return 0
return sum(numbers) / len(numbers)
# 测试
print(calculate_average([1, 2, 3, 4, 5])) # 3.0
print(calculate_average([])) # 0
print(calculate_average([100, 200])) # 150.0
练习题4:密码验证器
创建一个函数,验证密码是否有效。有效密码要求:至少8个字符,包含至少一个数字和一个大写字母。
def validate_password(password):
"""验证密码是否有效"""
if len(password) < 8:
return False
has_digit = any(char.isdigit() for char in password)
has_upper = any(char.isupper() for char in password)
return has_digit and has_upper
# 测试
print(validate_password("password")) # False
print(validate_password("Password123")) # True
print(validate_password("short1A")) # False
练习题5:字符串反转
创建一个函数,反转输入的字符串,并可以选择是否保留空格。
提示:使用可选参数控制是否保留空格。
def reverse_string(text, keep_spaces=True):
"""反转字符串,可选择是否保留空格"""
if not keep_spaces:
text = text.replace(" ", "")
return text[::-1]
# 测试
print(reverse_string("hello world")) # "dlrow olleh"
print(reverse_string("hello world", False)) # "dlrowolleh"
print(reverse_string("Python")) # "nohtyP"
练习题6:购物车总价
基于智能餐厅案例,创建一个购物车函数,计算包含商品、数量和折扣的总价。
扩展:添加会员折扣功能,会员享受额外5%折扣。
def calculate_cart_total(items, prices, is_member=False):
"""计算购物车总价"""
subtotal = 0
for item, quantity in items.items():
if item in prices:
subtotal += prices[item] * quantity
else:
print(f"商品 {item} 未找到价格")
# 应用折扣
discount = 0
if subtotal >= 100:
discount += subtotal * 0.1 # 满100减10%
if is_member:
discount += subtotal * 0.05 # 会员额外5%
final_total = subtotal - discount
return final_total, discount
# 测试
prices = {"苹果": 5, "香蕉": 3, "橙子": 4}
cart = {"苹果": 3, "香蕉": 2}
total, saved = calculate_cart_total(cart, prices, is_member=True)
print(f"总价:¥{total:.0f},节省:¥{saved:.0f}")