python3 模块

模块

在Python中,一个.py文件就称之为一个模块(Module)。

模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用。

import语句

可以通过在其他Python源文件中执行import语句来将任何Python源文件用作模块。

import module1[, module2[,... moduleN]

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。

搜索路径是一个解释器会先进行搜索的所有目录的列表。

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

from … import 语句

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。

from modname import name1[, name2[, ... nameN]]

from … import * 语句

把一个模块的所有内容全都导入到当前的命名空间也是可行的。

from modname import *

__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。

if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')

dir( )函数

dir()内置函数返回一个包含由模块定义的名称的字符串的排序列表。这个列表包含模块中定义的所有模块,变量和函数的名称。

import time

content = dir(time)

print(content)

输出:

['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']

Python中的包是一个分层文件目录结构,它定义了一个由模块和子包和子子包组成的Python应用程序环境。

假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz。

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany。

 

posted @ 2018-11-27 14:33  刘-皇叔  阅读(199)  评论(0编辑  收藏  举报