# 函数和模块 ## 函数基础 函数是对"功能独立且会重复使用"的代码的封装。通过函数可以:1)减少重复代码;2)提高代码可读性;3)便于团队协作。 ```python # 定义函数 def fac(num): """计算num的阶乘""" result = 1 for n in range(2, num + 1): result *= n return result # 调用函数 print(fac(5)) # 120 print(fac(7)) # 5040 ``` ## 函数的参数 ### 位置参数和关键字参数 ```python def greet(name, greeting='你好'): print(f'{greeting}, {name}!') greet('Alice') # 位置参数 greet(name='Bob', greeting='Hello') # 关键字参数 ``` ### 默认值参数 ```python def roll_dice(n=2): """掷n颗骰子,默认2颗""" import random return sum(random.randrange(1, 7) for _ in range(n)) print(roll_dice()) # 默认掷2颗 print(roll_dice(3)) # 掷3颗 ``` > **注意**:默认值参数必须放在非默认值参数之后。 ### 可变参数 ```python # 可变位置参数 def add(*args): return sum(args) print(add(1, 2, 3)) # 6 # 可变关键字参数 def print_info(**kwargs): for key, value in kwargs.items(): print(f'{key}: {value}') print_info(name='Alice', age=30, city='Beijing') ``` ## 模块管理 ### 什么是模块 每个 `.py` 文件就是一个模块,模块可以避免命名冲突: `module1.py`: ```python def foo(): print('hello') ``` `module2.py`: ```python def foo(): print('goodbye') ``` `main.py`: ```python import module1 import module2 module1.foo() # hello module2.foo() # goodbye ``` ### 导入方式 ```python import math # 导入整个模块 from math import factorial # 导入特定函数 from math import factorial as f # 导入并取别名 from math import * # 导入所有(不推荐) ``` ## 常用内置函数 | 函数 | 说明 | |------|------| | `abs(x)` | 绝对值 | | `max(iterable)` | 最大值 | | `min(iterable)` | 最小值 | | `sum(iterable)` | 求和 | | `len(thing)` | 长度 | | `pow(x, y)` | x 的 y 次方 | | `round(x, n)` | 四舍五入保留 n 位小数 | | `type(obj)` | 对象类型 | | `isinstance(obj, type)` | 类型判断 | | `input(prompt)` | 读取输入 | | `print(*args)` | 打印输出 | ## 总结 - 函数用 `def` 定义,`return` 返回值,无 `return` 返回 `None` - 参数类型:位置参数、关键字参数、默认值参数、可变参数 - 用模块管理函数,避免命名冲突 - Python 标准库提供了大量模块,优先使用现成实现(不要重复发明轮子)