一、导入的方式:
(1)、import spam # 导入并运行模块 spam
(2)、import os as system
(3)、import socket as net, thread as threads
(4)、使用from语句可以将模块中的对象直接导入到当前的名字空间. from语句不创建一个到模块名字空间的引用对象,而是把被导入模块的一个或多个对象直接放入当前的名字空间:
from socket import gethostname # 将gethostname放如当前名字空间
from语句支持逗号分割的对象,也可以使用星号(*)代表模块中除下划线开头的所有对象:
from socket import gethostname, socket
from socket import * # 载入所有对象到当前名字空间
二、模块名称__name__:
每个模块都拥有__name__ 属性,它是一个内容为模块名字的字符串。最顶层的模块名称是__main__ .命令行或是交互模式下程序都运行在__main__ 模块内部. 利用__name__属性,我们可以让同一个程序在不同的场合(单独执行或被导入)具有不同的行为,像下面这样做:
# 检查是单独执行还是被导入
if __name__ == '__main__': #Yes
statements
else: #No (可能被作为模块导入)
statements
#hello.py
def sayHello():
str="hello"
print(str);
if __name__ == "__main__":
print ('This is main of module "hello.py"')
sayHello()
#welcome.py
import hello
if __name__ == "__main__":
print(__name__)
print ('This is main of module "welcome.py"')
hello.sayHello()
1、当单独执行该module时,比如单独执行以上hello.py: python hello.py,则输出
This is main of module "hello.py"
hello
可以理解为"if __name__=="__main__":" 这一句与c中的main()函数所表述的是一致的,即作为入口;
2、当该module被其它module 引入使用时,其中的"if __name__=="__main__":"所表示的Block不会被执行,这是因为此时module被其它module引用时,其__name__的值将发生变化,__name__的值将会是module的名字。
比如在python shell中import welcome后,查看welcome.__name__,结果如下: