https://www.cnblogs.com/LancyWu/p/7283889.html
Python有一种方法将定义函数放在一个文件中,并在脚本中使用它们,这样的文件叫做模块,一个模块中的定义可以被导入到其他模块,或者主模块中。
简单来说在python中模块就是指一个py文件,如果我们将所有相关的代码都放在一个py文件中,则该py文件既是程序由是模块,但是程序和模块的设计目的是不同的,程序的目的是为了运行,而模块的目的是为了其他程序进行引用
Dictionary
Dictionary在pycharm中就是一个文件夹,放置资源文件,对应于在进行JavaWeb开发时用于放置css/js文件的目录,或者说在进行物体识别时,用来存储背景图像的文件夹。该文件夹其中并不包含_ _ init.py_ _文件
Python package
对于Python package 文件夹而言,与Dictionary不同之处在于其会自动创建_ _ init.py_ 文件。
简单的说,python package就是一个目录,其中包括一组模块和一个 _ init.py_ _文件。
Image/
_init _.py
jpg.py
tiff.py
bmp.py
只要image目录是我们程序目录的子目录,我们就可以导入image目录下的任意模块来为我们所用,使用时可如下:
_ _ init_ _.py
该文件与Python的import机制有关,这关乎到你的哪些.py文件是对外可访问的。有些时候,如果一个包下有很多模块,在调用方import如此多模块是很费事,且不优雅的,此时可以通过修改_ _ init_ .py来完成该任务。
在 _ init_ .py中定义特殊变量_ all_ ,将要包含的模块复制给该变量,例如在Image/ _ init_ .py中定义 all _=[‘tiff’,’bmp’,’jpg’],这里的all 对应的就是 from …import * 中*代指的模块,此时在引用方使用如下语句:
其实_ _ init_ .py可以为空,当其为空时,from Image import * 将Image包下所有的模块都进行引用,如果想要控制引用的模块,则可以自行定义 all _
一份程序为了区分主动执行还是被调用,Python引入了变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为’main’
所以会经常看到别人的代码这么写,同时也是典型的python文件结构:
#/usr/bin/env/ python #(1) 起始行
#"this is a test module" #(2) 模块文档(文档字符串)
import sys
import os #(3) 模块导入
debug = True #(4) (全局)变量定义
class FooClass (object):
'foo class'
pass #(5) 类定义(若有)
def main():
'test function'
foo = FooClass()
if debug:
print 'ran test()' #(6) 函数定义(若有)
if __name__ == '__main__':
main()
若是文件主动执行了,则最好写成跟上面的例子一样,main之前不要有可执行代码,这样做到程序从main()开始,流程逻辑性强
若是文件作为模块被调用,则可以不用写main(),从上而下顺序执行。