外观
import 语句
这是干嘛的?
如果你仔细研究过其他编程语言,或者是有一定的英语功底,在看到这个词的那一刻应该或多或少已经可以猜到这个语句是干嘛的了——没错,import
语句是用来引入模块的。就像 C++ 的 import
、JS 的 import
一样!
具体用法
一般来说,我们会将 import
语句放在 Python 文件的最开始,就像这样:
运行代码
import time # 引入 time 库
from time import sleep # 引入 time 库中的 sleep() 函数
import time as t # 引入 time 库,并在当前文件中将其命名为 t
import time, os # 可以同时引入多个不同的库
def output(str):
print(time.time(), str)
os.system("echo Hi")
sleep(1)
print(t.time(), 'Done.')
output("Hi!!")
上面的示例文件中,我们涉及到了几种最重要的 import 语句的使用方法。
我们逐条来分析:
最简单的用法
import time
import os, mysqlite
直接在 import
后面加上库名(可以添加多个)即可。
稍微复杂些的用法
import time as t
from time import *
from time import sleep
上面的代码块中,我们有三种用法。
相关信息
*
是常用的通配符,意为所有的;故第二行代码的含义就是引入 time
库下所有的函数和二级库
第一种用法,即这个代码块的第一行,是用于简化后续的编码的。有的时候库名会很长,此时一个较短的、易记忆的“缩写”就很重要了。这里,t
就是 time
的“缩写”。
而第二、第三行代码,则同样是用于简化后续编码流程的。当我们只需要 time.sleep()
的时候,直接引入一整个 time
库显然不太划算,而且每次使用 sleep()
都要在前面加上 time.
。如果我们使用第二、三行代码所演示的方式引入,则可以在代码中直接使用 sleep()
而不需要在前面加上 time.
。但是,这两种方法只能引入这个库中的内容,库本身是没有被引用的。如果还要使用别的对象,对于后一种方法,你还需要在后面写上,例如 from time import ctime, sleep
;对于前一种,表示已经导入了 time
中的所有对象,可以直接使用 ctime
。
不推荐第二种写法,因为不同库中可能存在相同名称的对象,同时泛引入难以让阅读者了解对象的来源。
导入同目录文件实例
导入方式
我们在同一目录下创建两个文件 main.py 和 lib.py,在 lib.py 中定义一个变量 a = 1
,在 main.py 中导入 lib.py 并输出 a
的值:

被导入库行为
我们在 lib.py 中除变量和函数的定义外再执行一个 print
语句,可以看到,无论我们使用 import lib
还是 from lib import a
,这个 print
语句都被执行了。

__name__
上例中的情况是我们大多时候不希望见到的。因此,我们通常将文件中直接执行的部分放入 if __name__** **== '__main__':
这样的判断语句中,如下所示:

那么 __name__
这个内建变量究竟是什么呢?由下图可见,当文件直接被运行时,__name__
的值是唯一固定的 '__main__'
;当文件被别的文件 import
时,__name__
的值是导入时所使用的名称(即图中 main.py 的第一行)。
