函数是一段 可重复使用, 用来实现单一,或相关联功能的的代码块,用于执行特定的任务,能够提高应用的模块性,和代码的重复利用率。
1. 函数的定义
1.1. 基本语法
def 函数名(参数1, 参数2, ...):"""函数文档字符串(可选)"""# 函数体return 返回值 # 可选
1.2. 示例
defgreet():"""简单的问候函数""" print("Hello, World!")# 调用函数greet() # 输出: Hello, World!
2. 函数参数
2.1. 位置参数
defadd(a, b):"""两个数相加"""return a + bresult = add(3, 5)print(result) # 输出: 8
2.2. 默认参数
defpower(base, exponent=2):"""计算幂,默认指数为2"""return base ** exponentprint(power(3)) # 输出: 9 (3的2次方)print(power(3, 3)) # 输出: 27 (3的3次方)
2.3. 关键字参数
defdescribe_person(name, age, city):returnf"{name} is {age} years old, living in {city}"# 使用关键字参数(顺序不重要)print(describe_person(age=25, city="Beijing", name="Alice"))
2.4. 可变参数 *args
defsum_all(*numbers):"""计算任意数量数字的和""" total = 0for num in numbers: total += numreturn totalprint(sum_all(1, 2, 3)) # 输出: 6print(sum_all(1, 2, 3, 4, 5)) # 输出: 15
2.5. 关键字可变参数 **kwargs
defprint_info(**info):"""打印任意数量的键值对"""for key, value in info.items(): print(f"{key}: {value}")print_info(name="Alice", age=25, city="Beijing")# 输出:# name: Alice# age: 25# city: Beijing
3. 返回值
3.1. 单个返回值
defsquare(x):return x * xresult = square(4)print(result) # 输出: 16
3.2. 多个返回值(返回元组)
defmin_max(numbers):"""返回列表中的最小值和最大值"""return min(numbers), max(numbers)minimum, maximum = min_max([1, 5, 3, 9, 2])print(f"Min: {minimum}, Max: {maximum}") # 输出: Min: 1, Max: 9
4. 函数作用域
变量的作用域是指变量的生效范围,主要分为:局部变量和全局变量
global_var = "I'm global"deftest_scope(): local_var = "I'm local" print(local_var) # 可以访问局部变量 print(global_var) # 可以访问全局变量# 修改全局变量需要声明global global_var global_var = "Modified global"test_scope()print(global_var) # 输出: Modified global
全局变量 (Global Variables)
# 全局变量global_counter = 0PI = 3.14159COMPANY_NAME = "TechCorp"defshow_global():# 可以读取全局变量 print(f"计数器: {global_counter}") print(f"PI值: {PI}") print(f"公司: {COMPANY_NAME}")show_global()print(f"外部访问: {COMPANY_NAME}") # 输出: 外部访问: TechCorp
局部变量 (Local Variables)
defcalculate():# 这些都是局部变量 a = 10 b = 20 result = a + b # result也是局部变量 print(f"局部变量: a={a}, b={b}, result={result}")return resultcalculate()# 尝试在函数外访问局部变量会报错# print(a) # NameError: name 'a' is not defined# print(result) # NameError: name 'result' is not defined
修改全局变量
# 定义全局变量a = 100print(a)deftestA(): print(a)# B函数想要a的取值是200deftestB():global a # 声明全局变量 a = 200# 全局变量 print(a)testA() # 输出结果是100testB() # 输出结果是200print(a) # 输出结果是200
5. Lambda函数(匿名函数)
# 普通函数defsquare(x):return x ** 2# Lambda函数square_lambda = lambda x: x ** 2print(square(5)) # 输出: 25print(square_lambda(5)) # 输出: 25# 常用场景:作为参数传递numbers = [1, 2, 3, 4, 5]squared = list(map(lambda x: x ** 2, numbers))print(squared) # 输出: [1, 4, 9, 16, 25]
6. 函数文档字符串
defcalculate_bmi(weight, height):""" 计算身体质量指数 (BMI) 参数: weight (float): 体重 (kg) height (float): 身高 (m) 返回: float: BMI值 str: BMI分类 """ bmi = weight / (height ** 2)if bmi < 18.5: category = "偏瘦"elif bmi < 24: category = "正常"elif bmi < 28: category = "超重"else: category = "肥胖"return round(bmi, 2), category# 查看文档print(calculate_bmi.__doc__)print(help(calculate_bmi))
7. 应用
7.1. 示例1:计算器函数
defcalculator(a, b, operation='add'):"""简单的计算器函数""" operations = {'add': a + b,'subtract': a - b,'multiply': a * b,'divide': a / b if b != 0else"Error: Division by zero" }return operations.get(operation, "Invalid operation")print(calculator(10, 5, 'add')) # 输出: 15print(calculator(10, 5, 'multiply')) # 输出: 50print(calculator(10, 0, 'divide')) # 输出: Error: Division by zero
7.2. 示例2:数据验证函数
defvalidate_user_input(username, password):""" 验证用户输入 返回: (是否有效, 错误消息) """ errors = []# 验证用户名ifnot username: errors.append("用户名不能为空")elif len(username) < 3: errors.append("用户名至少需要3个字符")# 验证密码ifnot password: errors.append("密码不能为空")elif len(password) < 6: errors.append("密码至少需要6个字符")return len(errors) == 0, errorsis_valid, error_msgs = validate_user_input("ali", "123")print(f"有效: {is_valid}, 错误: {error_msgs}")
8. 最佳实践建议
- 函数命名 :使用小写字母和下划线,如
calculate_average
defgreet(name: str, age: int) -> str:returnf"Hello, {name}. You are {age} years old."