Python 中的导包(import):从入门到实践 | 搞计算机的研究生们求你们看看吧
Python 中的导包(import):从入门到实践
在 Python 中,如果我们想使用其他人或自己写的功能(函数、类等),最常见的方式就是“导包”(import)。导包就相当于“拿来一个工具箱”,把里面的工具(代码)借来使用。本文将从基础到稍微进阶的层面,为你详细介绍 Python 的导包方式与常见用法。
一、为什么要导包?
举个生活中的例子:
在编程中,这些“工具”就可以看作各种功能、函数、类等。Python 官方或社区为我们准备了很多“工具箱”,里面装满了各种常用或专业的功能(比如数学运算、处理表格数据、网络通信等等)。我们不必重复造轮子,只需要把“工具箱”导入,直接使用它就可以了。
二、最基础的 import 用法
1. 直接 import 模块名
这是最基本、最直接的导包方法。比如我们想要使用 Python 内置的 math
模块来做数学运算,就可以这么写:
import math
# 使用 math 模块中的 sqrt 函数
num = 16
result = math.sqrt(num)
print(result) # 输出 4.0
在这里,我们先 import math
,就可以使用 math
模块里的所有公开函数,比如 math.sqrt()
、math.sin()
、math.cos()
等等。
小提示:
math
是 Python 的内置模块,安装 Python 时就自带了,不需要额外安装。random
、datetime
等,我们都可以用 import 模块名
的方式来使用。2. 使用 from 模块名 import 函数名/类名
有时候我们只想用模块中的某些函数或类,不想每次都写 模块名.函数名
,那就可以用这种形式。以 math
模块为例:
from math import sqrt
num = 25
result = sqrt(num)
print(result) # 输出 5.0
这里我们直接从 math
模块里导入了 sqrt
函数,这样在后续的使用中,就可以直接写 sqrt()
,而不用写 math.sqrt()
了。
但是要注意:
如果使用了相同名称的函数或变量,可能会出现“命名冲突”。比如你自己也定义了一个 sqrt
函数,那么就会出现混淆。所以要小心命名冲突的问题。
3. import 模块名 as 新名字
(重命名)
如果我们想让模块名更短或更简单,可以用 as
给它起一个别名,常见于一些比较长的库名称,比如 numpy
、pandas
等。示例:
import math as m
num = 36
result = m.sqrt(num)
print(result) # 输出 6.0
这样以后使用的时候,直接 m.sqrt()
就可以了,比较简洁。
同样,如果只导入模块中的部分内容,也可以给那部分内容起别名:
from math import sqrt as s
num = 49
result = s(num)
print(result) # 输出 7.0
三、导入多个模块或多个函数
1. 同时导入多个模块
如果你要同时导入多个模块,可以写在同一行或者多行,灵活使用:
import math, random
# 使用 math 模块
result_1 = math.sqrt(9)
# 使用 random 模块
result_2 = random.randint(1, 10)
print(result_1) # 3.0
print(result_2) # 1~10之间的随机整数
最好还是养成良好的习惯,把不同模块分到不同的导入语句中,以提高可读性:
import math
import random
2. 同时导入一个模块中的多个函数
如果只想从一个模块里导入多个函数,可以用逗号分隔:
from math import sqrt, sin, cos
print(sqrt(16)) # 4.0
print(sin(3.14159)) # 近似 0
print(cos(3.14159)) # 近似 -1
四、从自定义模块导入
除了 Python 自带和社区常用的库,你也可以自己编写 Python 文件作为“自定义模块”,然后在别的文件中导入。
-
新建一个文件
mytools.py
,内容如下:def say_hello(name): print(f"Hello, {name}!") def add_numbers(a, b): return a + b
-
在同一文件夹下,新建另一个 Python 文件
test.py
并写:import mytools mytools.say_hello("Alice") # Hello, Alice! result = mytools.add_numbers(5, 7) print(result) # 12
Python 会在当前文件夹下找一个叫 mytools.py
的文件,并导入其中定义的函数 say_hello
和 add_numbers
。
如果只想要导入 say_hello
,可以这样写:
from mytools import say_hello
say_hello("Bob") # Hello, Bob!
当然,在大型项目里,模块之间的层次会更复杂,还会涉及 相对导入 等,更高级的用法需要我们在学习到包(package
)的概念后再深入掌握。
五、一次性导入全部内容:from 模块名 import *
有时候,我们会看到类似 from math import *
的语句,这表示把 math
模块里的所有函数和变量一次性导入到当前作用域中。这样就可以直接用 sqrt()
、sin()
等,似乎很方便。但这样做在实际项目中并不推荐,主要原因有两个:
- 代码可读性变差:无法一眼看出哪些函数来自本地定义,哪些来自模块。
- 可能发生命名冲突:如果你本地有个函数和模块里的同名函数冲突,会导致各种难以排查的错误。
所以,在实际工作中,from ... import *
一般只在交互式实验(如 Jupyter Notebook 快速测试)或临时小脚本中使用,正式项目中尽量不要这样写。
六、安装并导入第三方库
Python 不仅有内置标准库,还有很多由社区贡献的第三方库。例如:
requests
(进行网络请求),flask
(Web 后端框架),tensorflow
(深度学习),等等。使用第三方库时,需要先在命令行/终端执行:
pip install requests
然后就可以在代码里用 import requests
来引用了:
import requests
response = requests.get("https://www.example.com")
print(response.status_code) # 200
七、总结
import 模块名
from 模块名 import 函数/类/变量
import 模块名 as 别名
from 模块名 import 函数/类/变量 as 别名
pip install 库名
安装,然后再 import
。from 模块名 import *
方式来导包。希望本文能让你快速理解并上手 Python 的导包语法,合理地使用 Python 库既能提高代码质量,也能节省开发时间。让我们在编程之路上越走越顺利吧!
感谢阅读! 如果这篇文章对你有帮助,欢迎分享给你的同学或朋友。一起学习,一起进步!
作者:迪菲赫尔曼