Python 模块的导入 和 模块名称

一、导入的方式:

(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()

运行welcome.py,得到结果:



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__,结果如下:



你可能感兴趣的:(python)