# 知识库

# 2.1.5 内置函数

Python 内置函数是解释器预先提供、无需导入模块即可直接调用的函数，用来完成类型转换、数学计算、序列处理、输入输出和对象查看等常见任务。本小节将常用内置函数分成五类：数据类型转换函数 `int()`、`float()`、`str()`、`list()`、`tuple()`、`set()`、`dict()`；对象与属性函数 `type()`、`dir()`；数学运算函数 `abs()`、`round()`、`max()`、`min()`；序列操作函数 `len()`、`sum()`、`range()`；输入输出函数 `input()`、`print()`。

数据类型转换方面，`int()` 可以把字符串或实数转换成整数：`int("123")` 得到整数 123，`int(3.45)` 得到整数 3。把实数转换成整数会丢掉小数部分，造成信息丢失。`float()` 可以把字符串或整数转换成实数：`float('3.14')` 得到 3.14，`float(56)` 得到 56.0。`str()` 可以把整数、实数以及组合数据类型等多种对象转换成字符串：`str(1248)` 得到 `'1248'`，`str([2, 5, 7])` 得到 `'[2, 5, 7]'`。数学运算方面，`abs()` 取绝对值，`round()` 按指定位数四舍五入，`max()` 和 `min()` 分别求最大值和最小值。例如 `max([2.1, 5.4, 3.8])` 的结果是 5.4，`round(3.25632, 2)` 的结果是 3.26。

序列操作方面，`len()` 获取序列长度，`sum()` 对序列中的元素求和，`range()` 生成整数序列。例如 `len('Thank you!')` 的结果是 10，`sum([3, 4, 5])` 的结果是 12。`range()` 的语法是 `range(start, stop, step)`：`start` 可选，默认 0；`stop` 是结束值且必须给出，生成的序列不包含该值；`step` 可选，默认 1。`range()` 返回可迭代对象，数值在实际迭代时才计算，直接输出该对象看不到具体序列值，常用 `list()` 转换后再查看，也常用来控制循环次数。例如 `list(range(5))` 得到 `[0, 1, 2, 3, 4]`，`list(range(0, 10, 2))` 得到 `[0, 2, 4, 6, 8]`。输入输出方面，`input()` 从用户获取输入：程序运行到此处会暂停并等待用户输入文本，按下回车后以字符串形式返回；参数是显示给用户的提示信息。因为返回值始终是字符串，若需要整数或实数，必须再用 `int()` 或 `float()` 转换。`print()` 把任意数量的对象转换成字符串后输出到屏幕，默认用空格分隔各项、以换行结束；可用 `sep` 指定分隔符，用 `end` 指定结束符。例如：

```python
print("Python", "is", "fun!")
print("Python", "is", "fun!", sep='---', end=' ')
print('I love it!')
```

第一行输出 `Python is fun!`；后两行同一行输出 `Python---is---fun! I love it!`。对象操作方面，`type()` 返回对象的类型，`dir()` 列出对象的全部属性和方法。例如 `a = 3.54` 时，`type(a)` 的结果为 float。

使用时要注意几个常见坑。第一，`int()` 转换实数是截去小数部分，不是四舍五入，`int(3.45)` 得到 3 而不是 4。第二，`input()` 的结果是字符串，不转换就做算术运算会出错。第三，变量名并不强制禁止使用内置函数名，但一旦写成 `list = [3, 4, 5]`，`list` 就不再是构造列表的函数，再写 `list('abc')` 会报 `TypeError: 'list' object is not callable`。第四，`range()` 不含结束值，且对象本身不是列表。

## 关键要点
- 内置函数由解释器直接提供，无需导入即可调用。
- 五类：数据类型转换、对象与属性、数学运算、序列操作、输入输出。
- `int()` / `float()` / `str()` 等完成类型转换；`int()` 将实数转整数会丢失小数部分。
- `abs()`、`round()`、`max()`、`min()` 用于常用数学运算。
- `len()`、`sum()`、`range()` 用于求长度、求和与生成整数序列；`range` 不含结束值。
- `input()` 返回字符串；`print()` 可用 `sep`、`end` 控制分隔符与结束符。
- `type()` 查看类型，`dir()` 列出对象的属性和方法。
- 不要用内置函数名作变量名，否则该函数将无法再被调用。

---
