import这句话
打开任何一个python程序,最先看到的一般都是import XXX 或者 from XXX import XXX 。
如果有一点了解,那么我们会知道这是在引入一个包。对于很多像我一样的之前用c/c++的学生或程序猿一样,可能第一反应就是跟#include “XXX.h” 来类比,那么,这两者有什么不同呢?
回忆一下include预编译指令
c++里面用include非常简单粗暴,它的意思就是在编译之前把include的东西直接抄过来,所以正式编译的时候,你完全不用管这些代码是哪里来的。
python模块
python的模块,跟c++的头文件之类是不一样的(虽然好像c++20也要引入模块了?)。一般来说,模块是一个包含函数与变量、以 .py 为后缀的文件,但是神奇的是也可以使用 C语言来写Python 模块,在编译后,通过标准 Python 解释器在 Python 代码中使用它们。
当然有一点很重要——这里没有声明后定义之类复杂的东西。
python包
我们一般见到的很多的是“包”,包是指一个包含模块与一个特殊的 init.py 文件的文件夹,后者向 Python 表明这一文件夹是特别的,包含了 Python 模块。它是一种组织模块的方式,可以认为是“有很多模块的模块”,或者其它理解方式。
import 模块
当 Python 运行 import XXX 这一语句时,它会开始寻找对应的模块。如果找到了对应模块,则该模块中的语句将在开始运行,并能够为你所使用(这似乎是与include指令相似的)。但是引入后就不同了——当你使用模块中的所有东西,你都需要用模块名.变量/函数名来使用,这极大的避免了重名的情况,当然,也稍微麻烦了一点。python其实是将一个模块作为一个命名空间,相当于把整个.h包含在一个namespace中。
如果你希望直接将某个变量导入你的程序(为了避免每次都要输入XXX.),可以通过使用 from XXX import XXX 语句来实现这一点。当然,这可能会有造成命名冲突的风险,不过这风险当然比起using namespace XXX要来的小多了。