模块是一个可以交互使用,或者从python程序访问的代码段,只要导入一个模块就可以使用这个模块的任何公共函数、类或者属性。
python有三种导入模块的方法:
1)import modename
使用这种方式相当于在当前导入的命名空间(namespace)里新建了一个modename,所以使用该模块的方法或者属性时,
必须加上模块名称,例如:modname.func()
当方法存在重名函数时,必须使用import modename的导入方式。便于区分是哪个模块的函数。
2)from modename import func/classname from modename import a,b,c
func/classname 被直接导入到了本地命名空间中,所以可以直接使用,不需要添加模块名称。
3)【mod=__import__("modname",global(),local(),"funcname/classname")】
这个函数相当于from modename import func/classname
python将代码拆分为模块最初的目的是功能的独立,所以所模块提供的是某个独立的功能。
作为函数式编程语言,python模块的内容一般是函数的形式 。
if __name__ == '__main__'
当模块被直接运行时,模块的_name_属性值为_main_,所以可以在直接运行时写入一些调试语句;
当模块被import载入使用时,_name_属性为模块的名称,所以就会自动忽略调试语句。
在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。
包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含
__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某
些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。
if __name__ == "__main__":
tf.app.run()
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import sys
from tensorflow.python.platform import flags
def run(main=None):
f = flags.FLAGS
f._parse_flags()
main = main or sys.modules['__main__'].main
sys.exit(main(sys.argv))